URLエンコードが小文字だと403エラーになってしまうようです。
以下の記事を参照して、URLエンコードを大文字に変えたらエラーは収まりました。
https://stackoverflow.com/questions/918019/net-urlencode-lowercase-problem
URLエンコードが小文字だと403エラーになってしまうようです。
以下の記事を参照して、URLエンコードを大文字に変えたらエラーは収まりました。
https://stackoverflow.com/questions/918019/net-urlencode-lowercase-problem
Google Cloud Messaging (GCM)
http://developer.android.com/google/gcm/gcm.html
1.プロジェクトに「Module」としてJARファイルを追加
2.Open Module Settings を開いて Dependency > 「+」(追加)> Module dependency から上記のJARファイルを洗濯
Microsoft Office Developer Tools for Visual Studio 2015をインストールする必要がある。
ボタンの左にUIBarButtonItemFlexibleSpace(左右外向き矢印)を追加する
以下のページに詳しく説明してあるので、その通りにやれば問題ないはず。
About Location Services and Maps
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html
Getting the User’s Location
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1
MapKit.Framework はMapKitViewを追加したら勝手に追加されてた気がしますが、またはProject>Capabilitiesからも追加できます。
CoreLocation.Framework はProject>Build Phases から追加
ただし、現在位置に移動しようとしたら以下のエラーがでるかもしれません。
Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
そのときは Info.plist に以下のエントリを追加します。
<key>NSLocationAlwaysUsageDescription</key>
<string>Please allow this app to access your location.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Please allow this app to access your location.</string>
GoogleMap.OnMyLocationChangeListener なるものを使おうと思ったのですが、APIのドキュメントを見ると 、このInterfaceは”Deprecated” なので FusedLocationApi を使うように、と書いてあり、素直に従うことにします。
FusedLocationApi を利用するために、まずGoogleApiClientを作成します。
mClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mClient.connect();
この例では、呼び出し元クラスにGoogleApiClient.ConnectionCallbacksとGoogleApiClient.OnConnectionFailedListenerを実装し、Connectionの成否をコールバックで受け取るようにしています。GoogleApiClientのConnectが成功したら、FusedLocationApi.requestLocationUpdates() をコールします。Updateされた情報を受け取るために、呼び出し元クラスにLocationListener も実装しておきます。
//GoogleApiClient.ConnectionCallbacks
public void onConnected (Bundle connectionHint)
{
LocationServices.FusedLocationApi.requestLocationUpdates(mClient, LocationRequest.create(), this);
}
位置情報が更新されるとLocationListener.onLocationChanged() が呼び出されるので、そこで位置情報を取得します。下の例では、この位置情報を元にGoogleMapの表示位置を移動させています。
//LocationListener
public void onLocationChanged (Location location)
{
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 13));}
参照リンク
Receiving Location Updates
Making Your App Location-Aware
GoogleMapを使うアプリを作成してみました。
Android StudioのプロジェクトテンプレートにすでにMapアプリが用意されているので、これを使ってみました。しかし、そのまま実行してみると真っ白の画面しか表示されません。
ログをよく見ると以下のエラーがでています。
E/Google Maps Android API﹕ Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
いろいろ探していると、res/values/google_maps_api.xml というファイルに『Google Maps API keyを取得してセットする必要が有る」旨が書いてありました。そこに書いてあった通りの手順で、Keyは簡単に取得できました。その値を google_maps_api.xml にセットすると、無事にマップが表示されました。
右上のボタンにタッチすると現在位置に移動します。(真ん中の青い点)
次は最初に現在位置を取得して表示できるようにしてみます。
ALAssetsLibrary の writeImageToSavedPhotosAlbum メソッドを使います。
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
UIImage* img = self.imageView.image;
[library writeImageToSavedPhotosAlbum:img.CGImage orientation:ALAssetOrientationUp completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
//エラー処理
}
}];