Skip to content

Instantly share code, notes, and snippets.

@funwarioisii
Created June 27, 2018 11:20
Show Gist options
  • Save funwarioisii/b73a229f1594cce13f14d58ab7e5d3ef to your computer and use it in GitHub Desktop.
Save funwarioisii/b73a229f1594cce13f14d58ab7e5d3ef to your computer and use it in GitHub Desktop.
Android関連のメモ

Android関連のメモ

Android M以降でPermission Denied

Android M(API 23)以降から権限が厳しくなりました 随分昔の話です

AndroidManifest.xmlに欲しい権限を記述し,Fragmentなどを使ってユーザーに許可させる対話的なUIが増えました

外部ストレージにログを吐き出すコードをよく書くのですが,いい感じにモジュール化したくて書いたところ権限周りでエラーが発生しました.

fun writeText(message: String): Boolean {
    val fos = FileOutputStream("${getExternalStorageDirectory().path}/${this.fileName}", true)
    fos.write(message.toByteArray())
    fos.close()
    return true
}

こんな感じのコードを試したら

java.io.FileNotFoundException: /storage/emulated/0/test.csv (Permission denied)

と怒られました.ユーザーの許可が必要なのを忘れていたのです.

以下は解決の手順です.

  1. 実機をつなぎます
  2. Android JUnitで実機を使ってテストを
  3. テスト落ちるのですが,本体にアプリが入っています
  4. 設定→アプリ→(自分が開発しているアプリ)→許可を選択し,対応する権限を付与します

よくやるあれなのですが,JUnitでテストやってるときにアプリが入っているとは思わなかったので戸惑いました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment