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でした。
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に対応してしまいましょう。