Date: 2019/7/5 Cate: Android Tags:  

Androidでなにかファイルとかを保存するときにWRITE_EXTERNAL_STORAGEのパーミッションを取得する必要があります。

ActivityCompat.requestPermissionsをつかってちゃんとパーミッションを取得したつもりだったのに、なぜかREAD_EXTERNAL_STORAGEのほうだけしかパーミッションがとれず、WRITE_EXTERNAL_STORAGEのパーミッションが付与されないということでめっちゃハマったのでメモ。

Androidの設定からアプリの権限を確認しても、ちゃんと「ストレージ」の権限がついているのに・・・ということでとてもハマってしまった・・・。

maxSdkVersionが設定されていた

ActivityCompat.requestPermissions not showing dialog box

こちらのStackOverflowで理由がわかりました。

Android StudioでAndroidManifest.xmlを開いて、Merged ManifestをみたところなぜかWRITE_EXTERNAL_STORAGEのパーミッションにmaxSdkVersionがついていました。

なにかつかってるライブラリのManifestで設定されていたのでしょう。その結果、maxSdkVersion以上のSDKバージョンの端末ではWRITE_EXTERNAL_STORAGEの権限がそもそもManifestからなくなってしまって、ActivityCompat.requestPermissionsを呼んでも権限がとれなかったようです。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:remove="android:maxSdkVersion"/>
このようにmaxSdkVersionを取り除く設定をしたらうまくいきました。

Leave a Reply