checkSelfPermissionがPERMISSION_DENIEDしか返してくれない罠を踏み抜いた話
すでにリリース済みのアプリに対して某広告系ライブラリを入れた時に突如パーミッション関係が軒並みDENIEDを返すようになりパニックになったので自分のための備忘録として。
現象
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
もしくはその後、requestPermission
をコールした後にonRequestPermissionsResult
で戻ってきた後の第三引数が全部PERMISSION_DENIEDになる。
ちなみに勿論パーミッションは許可された状態で起きる。
今回の場合はすでにリリース済みのアプリで、このあたりは元々元気に動いていたのに急にスンッ・・・とおかしくなったので事態の把握は楽でした。
原因と対応
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
AndroidManifest.xml
で定義しているpermissionは上記のような定義だったのだけれど・・・
Merged Manifest
のほうで確認してみると
/(^o^)\・・・
そう。ライブラリ側でuses-permission
にmaxSdkVersion
が有り難くも設定されていたのでそもそもmaxSdkVersion
を超えるSDKバージョンの場合はuses-permission
の定義は無かったことになる。
すなわちcheckSelfPermission
がDENIEDなのは当然の結果だった・・・
ということで、
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace" />
node="replase"
指定を追加して、有り難く設定されているライブラリ側のmaxSdkVersion
は無視させて頂くことにした。
教訓
新しいライブラリをリリース済みアプリに入れる時は、Merged Manifest
がどうなっているかちゃんとチェックしようね!ぜったいだよ!
Author And Source
この問題について(checkSelfPermissionがPERMISSION_DENIEDしか返してくれない罠を踏み抜いた話), 我々は、より多くの情報をここで見つけました https://qiita.com/misadroid/items/fa8db3ccc738c0d21394著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .