【Android】6.0からのパーミッション

今日のエラー

ファイルをローカル保存しようとした時、
SecurityException: Permission denied (missing INTERNET permission?)
が投げられた。

原因

Androidは6.0からパーミッションの取り扱いが変わったため。

6.0以前

パーミッションのユーザ承認は、GooglePlayから入手する時に明示されるだけだった。

6.0以降

危険なパーミッションに限り、コード上でユーザ承認がなされていなければパーミッションエラーとなる。

解決

ユーザにパーミッション承認を得て、危険な機能の使用時に承認済みであることをチェックすることが必要。
今回のようにファイルのローカル保存なら、各処理の前にWRITE_EXTERNAL_STORAGEのパーミッション承認をかませると良い。
なお、今までのようにAndroidManifest.xmlにパーミッションの記述が引き続き必要。

ユーザにパーミッション承認を得る
String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(
    activity,
    permissions,
    0);
危険な機能のパーミッションが承認済みであることをチェックする
if (ContextCompat.checkSelfPermission(
    activity,
    android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
  != PackageManager.PERMISSION_GRANTED) {
}

リファレンス

概要
危険な機能とパーミッション一覧

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、秋月なるです。
アラフォー会社員で、スマホアプリ/ゲーム/AIが好き。新しいものを見ると触りたくなるタイプで、スマホやウェアラブル等ガジェットが好きですが、よく買ったあとに「思ってたのと違う…」をやりがち。
ブログ投稿は趣味の1つなので、ゆるく続けていこうと思います。

目次