LoginSignup
1
1

More than 5 years have passed since last update.

RuntimePermissionに対応する

Posted at

RuntimePermissionに対応する

RuntimePermissionについてはこちらを参照
https://developer.android.com/training/permissions/requesting.html

独自で権限チェックを行っていましたがコードがすっきりしそうなので以下のライブラリを使用しました。

PermissionsDispatcher
https://github.com/hotchemi/PermissionsDispatcher

上記GitHubにも使用方法が記載されていますが、備忘のために簡単に使い方・使用感などをまとめたいと思います

class

権限を要求するクラスに@RuntimePermissionsを付与します。
これにより
上記のクラス名 + PermissionsDispatcher というクラスが自動生成されます。
一度アプリを実行しないと生成されないのでご注意ください。

gradle

Gradleに以下を追加します。
この時点での最新バージョンは2.2.1でした。

app.build.gradle

dependencies {

    compile 'com.github.hotchemi:permissionsdispatcher:2.2.1'
    annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.2.1'

}

権限を要求するメソッド

NeedsPermissionが必要なメソッド名がneedMethodであればその部分を
needMethodWithCheck()に変更し呼び出します。

上記のクラス名 + PermissionsDispatcher.needMethodWithCheck()
という形になります。

各アノテーションについて

@NeedsPermission(Manifest.permission.CAMERA)

パーミッションが必要なメソッドにつけるアノテーション
ここで権限が必要な処理を行います

@OnShowRationale(Manifest.permission.CAMERA)

許可しないを1回されているユーザに対して何をするか。
これは仕様により行いたい事は色々です。

再度権限を要求するようであれば以下のような実装で問題ない

@OnShowRationale(Manifest.permission.CAMERA)
public void onRationale(PermissionRequest request) {
    request.proceed();
}
@OnPermissionDenied(Manifest.permission.CAMERA)

許可しないをタップされた後の処理を記載します。

@OnPermissionDenied(Manifest.permission.CAMERA)
public void onPermissionDenied() {
    // 許可されなかった場合に行う処理
}
@OnNeverAskAgain(Manifest.permission.CAMERA)

今後は表示しない(許可しないを1回おされていると表示されます)
が選択されてしまった場合にとるアクションを記載します。

ただしこのライブラリの場合は、一度選択されてしまうと毎回この中の
処理が実行されてしまうためダイアログなどを表示していた場合はかなりくどい展開となります。

そのあたりは仕様次第なところがありますが念のため

まとめ

今回は既存の自前チェックをライブラリでおきかえるという使用方法でしたが
特にハマりどころもなく簡単にのせかえでき便利でした。

一点だけハマったのは既存コードの置き換えだったためNeedsPermissionが必要な
メソッドがprivateになっていて予期した動作にならなかった事くらいでした。

皆様も便利にRuntimePermissionに対応してしまいましょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1