趣味でAndroidアプリを作ってます。

こんな感じで地図上に場所を記憶させて、

ピンをクリックすると画像付きの詳細が見れます。

コメントが見切れているのはご愛敬です(笑)

 

でも、Androidの開発って、エラー解析しようとすると、まだ日本語サイトが少ないし結構大変なんですよね。。。

という事で、少しでも開発者の支援になればと、このブログにも時々メモを残そうと思います。

 

さて、

今日はスマホを機種変更したので、アプリも再インストールです。

これまでの携帯のように、開発者モードにしてアプリを落として起動したのですが・・・

「問題が発生したのでアプリを終了します」 

(´;ω;`)

 

ログを見ると、こんなこと言われてます。

06-02 17:37:48.201 6050-6050/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.XXXXX.mapmemo, PID: 6050
java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION
at com.google.maps.api.android.lib6.impl.az.c(:com.google.android.gms.DynamiteModulesB:675)
at com.google.android.gms.maps.internal.j.onTransact(:com.google.android.gms.DynamiteModulesB:177)
at android.os.Binder.transact(Binder.java:387)

ポイントは、「requires permission」ですね。

どうやら位置情報の権限が与えられていないようです。今までの機種では普通に使えてるのに・・・?

 

で、調べてみたところ、Android6.0以降より、アプリの権限付与周りの仕様が変更されているみたいです。

道理で。なんせ古い機種はAndroid4でしたからね^^;

 

正しいプログラムとしては

アプリ起動 ⇒ 権限の確認 ⇒ 権限があればアプリ続行

⇒ 権限がない場合は、権限付与のダイアログを表示

一度設定すればアプリ側に権限が残るので、以降は普通に起動する。

というのが定石みたいですね。

つまり、権限付与のコーディングしないと動かないってこと????

orz

 

しか~し、諦めるのはまだ早い!

アプリ側で権限設定しなくても、端末側から設定する方法がありました。

設定 ⇒ アプリ ⇒ 自作アプリ  を選択

  許可を選択

AndroidManifest.xmlに定義された権限が一覧されるので、1つ1つON/OFF切り替えが可能です!! ここで両方ONにしたところ、無事起動できました♪

 

そんなわけで、今回の教訓。

Android6.0以降では、権限が必要な処理の前には権限を確認して ある場合/ない場合 の制御が必要。

By triumph

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください