Android

[Android] パーミッション管理を簡単・簡潔に書けそうなPermissionsDispatcher

投稿日:2018年4月16日 更新日:

はじめに

Android初心者(自分含む)がつまづく点のひとつだと思われる、Android 6.0 Marshmallow以降でのパーミッション管理ですが、皆さんどのように書いておられるでしょうか。

すでに定型化できていればよいのですが、新しく実装する場合は今回紹介するPermissionsDispatcherが導入も簡単、かつ分かりやすく記述できて良さそうでした。

(今回例示するコードはJavaですが、最新の3系ではKotlinもフルサポートとのことです)

環境

Android Studio 3.0.1
JRE: 1.8.0_152-release-915-b08 x86_64
Mac OS X 10.13.3

導入

appモジュールのbuild.gradleを編集します。最新バージョンは公式のgithubを確認してください。
なお、上記のリンク先で書かれているexclude module: "support-v13"のくだりは、Fragmentのサポートが不要な場合の記述なので、パーミッション周りの処理をFragmentでも行いたい場合は下記でOKです。

Activityでの実装例

アプリ内でカメラ機能のパーミッションが必要なケースを想定します。

@RuntimePermissions(必須)

PermissionsDispatcherが動作するために必要なアノテーションです。
ActivityまたはFragmentのクラス宣言に付けます。

PermissionsDispatcherに処理を移譲する

アノテーションを記述することによって自動生成されるクラスに、パーミッションの取り回しを移譲します。
最初はMainActivityPermissionsDispatcherが解決できず赤文字になるかもしれませんが、その場合はBuild > Rebuild Projectを実行してください。

@NeedsPermission(必須)

パーミッションを要求するダイアログで「許可」を選択した時、あるいは既に許可されている場合の処理です。
(カメラの場合であればCamera.open()など、パーミッションが無いとExceptionが発生するようなコードです)

ここまでは必ず記述することになる正常系のコードです。
以降はパーミッションの要求が拒否された場合の処理になります。
(optionalですが、実装しないということはあまり無いと思います)

@OnPermissionDenied(オプション)

「許可しない」が選択された時の処理です。

@OnShowRationale(オプション)

パーミッション要求が拒否されている場合に、許可が必要な理由を表示します。
request.proceed()でパーミッション要求のダイアログが再表示されます。

@OnNeverAskAgain(オプション)

パーミッション要求が一度拒否されると、二回目以降は「今後表示しない」というチェックボックスがダイアログに表示されるようになります。これをチェックして「許可しない」を選択すると、以降はアプリ内で権限を取得できなくなります。

この状態になると、アプリ内でできることは無くなりますので、ユーザーに手動で設定画面から許可してもらうよう促すしかありません。
設定画面への遷移処理をIntentで実装するケースもあると思います。

さいごに

いかがでしたでしょうか。

Marshmallow以前・以後をまたいでAndroidに関わっている方であれば、パーミッション周りについてはご自身の実装パターンをお持ちかもしれませんが、アノテーションを使ってスッキリ記述できるのは中々良いのではないでしょうか。

また、そうでない方にとっても「何を実装しなければいけないのか」「何をユーザーに伝える必要があるのか」が、コードを読むだけで理解しやすく、おすすめできると思います。

page_footer_300rect




page_footer_300rect




-Android

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Kotlin MPAndroidChartライブラリを使いボリンジャーバンドを描画してみる。

1 はじめに2 ボリンジャーバンドとは2.1 ライブラリの導入2.2 描画の準備3 ボリンジャーバンドを描画する3.1 CombinedChartの設定3.2 CombinedChart用のデータ作成 ...

Android JavaでS3への画像アップロード

1 はじめに2 AWS上での事前準備3 Android StudioのGradleでAWS SDKをインストール4 ManifestにPermissionの追加5 カメラで写真を撮影し、保存先のPat ...

【Kotlin】FirebaseAuthenticationでメールアドレスで認証機能を実装

1 はじめに2 レイアウト3 新規登録4 ログイン5 さいごに6 参考7 おすすめ書籍 はじめに こんにちは。miyagawaです。 前回は「FirebaseAuthenticationでGoogle ...

【Kotlin + Retrofit】API通信してみる

1 はじめに2 準備3 レイアウトファイルの作成4 APIを実装する5 さいごに6 おすすめ書籍 はじめに こんにちは。miyagawaです。つい最近、ポケモン剣盾を衝動買いしてしました。BW2から全 ...

AndroidでWebViewを使用する時に押さえておきたいポイント5選

1 はじめに2 JSのAlert, Confirm, Promptが表示されない!3 読み込み中の進捗を表示する4 UserAgent5 クリアテキスト設定5.1 クリアテキストを無効にする5.2 H ...

フォロー

follow us in feedly

page_side_300rect

2018年4月
« 3月 5月 »
1234567
891011121314
15161718192021
22232425262728
2930 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。