Android 6.0以降アプリがmkdirでフォルダを作れない場合の対処

アプリは動くがストレージにmkdirでフォルダを作れない場合

タイトルのとおり、ストレージにアクセスするアプリを作った場合、Android 6.0以降の実機ではエラーが出たり上手く動かないことがあります。私の場合はこんなエラーが出ました。

Android 6.0 (API level 23)以降、ユーザの機密データにアクセスする可能性のある権限をアプリが使用する場合、実行時にユーザ確認を行わないといけなくなりました。実行時のアクセス許可については、以下のページを読んでください。

Android Developers 実行時のアクセス許可要求

また、ユーザの機密データにアクセスする危険な権限の一覧は以下のページにあります。このページに書かれている権限を利用しているアプリは、すべて対応が必要と思います。

Android Developers 危険な権限

というわけで対処法です。権限を必要とする処理を行うActivityのonCreateメソッドから以下のコードを実行します。

ContextCompat.checkSelfPermissionメソッドは、実行時の権限チェックを行うメソッドです。第1引数はandroid.content.Contextオブジェクトですので、この場合はアクティビティクラスのオブジェクト自身を渡しています。ActivityクラスはContextクラスを継承しています。第2引数はチェックする権限の文字列です。その戻り値は権限が与えられていればPackageManager.PERMISSION_GRANTEDを返し、それ以外はPackageManager.PERMISSION_DENIED を返します。

つまり上記のコードはAPIレベルが23以降のとき、ストレージへの書き込み、および読み取りに対する実行時権限チェックを行っていることになります。その結果、権限がなければ、ActivityCompat.requestPermissionsメソッドでアプリに対する権限を付与するように要求しています。

ソースの参考にしたサイト

注意として、従来通りAndroidManifest.xmlに実行権限の記述も必ず記入しておいてください。

こうすることで、該当するアクティビティが生成されたときにこのような権限へのアクセス許可を確認するダイアログが出ます。

Screenshot_20160830-144902

以上となります。

広告
  • LINEで送る