targetSdkVersionが23以上のとき、AndroidManifest.xmlでandroid.permission.ACCESS_FINE_LOCATIONのパーミッション追加しているのにcheckCallingOrSelfPermission()が通らなかったことから学ぶAndroidのパーミッション
こんにちは。tsmsogn です。
タイトルのとおり、targetSdkVersion
が 23
以上のとき、AndroidManifest.xml で
android.permission.ACCESS_FINE_LOCATION のパーミッション追加しているにも関わらず、checkCallingOrSelfPermission() で思った値が返ってこない現象にあたりました。
具体的なコードは以下のとおりです。
int res = checkCallingOrSelfPermission("android.permission.ACCESS_FINE_LOCATION"); boolean permissionGranted = res == PackageManager.PERMISSION_GRANTED;
環境
- AndroidManifest.xml に
ACCESS_FINE_LOCATION
の設定は追加済み
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Needed only if your app targets Android 5.0 (API level 21) or higher. --> <uses-feature android:name="android.hardware.location.gps" />
- app/build.gradle の targetSdkVersion は 25
同じ問題に当たってる人もいる
この通りに、targetSdkVersion
を 25
となっていたのを 22
にするといくようになりました。
そもそもtargetSdkVerionって?
にあるとおり、上位互換のための設定。
そもそもなぜそうなったの?
ではどうするか?
https://developer.android.com/training/permissions/requesting.html?hl=ja
このとおりです。。。
まとめ
targetSdkVersion が 23 以上のときは、Dangerous パーミッションをリクエストするには、明示的にコードを書く必要があります。