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に関わっている方であれば、パーミッション周りについてはご自身の実装パターンをお持ちかもしれませんが、アノテーションを使ってスッキリ記述できるのは中々良いのではないでしょうか。

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

blog-page_footer_336




blog-page_footer_336




-Android

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

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

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

【Kotlin】RecyclerViewAdapterを使ってリスト表示

1 はじめに2 GradleファイルにRecyclerViewの設定を追加する3 レイアウトファイルの作成4 Adapterクラスの追加5 Activityファイルへの追加6 さいごに7 おすすめ書籍 ...

【kotlin】CameraXでAndroidカメラを実装してみた

1 はじめに2 概要3 使用前の準備4 ViewFinderLayoutを実装する5 Camera Permissionのリクエスト6 カメラ撮影機能を実装する6.1 Previewクラスの実装6.2 ...

【Kotlin】RoomでDB管理をする

1 はじめに2 Gradleを更新3 Data Classを作成する4 DAOファイルを作成する5 RoomDatabaseファイルを作成する6 DBを操作してみる7 さいごに8 参考9 おすすめ書籍 ...

[Android] KotlinでTextToSpeech

1 はじめに2 環境3 MainActivity.kt4 SpeechListener.kt5 activity_main.xml6 さいごに はじめに こんにちは。最近ようやくKotlinに手を付け ...

フォロー

blog-page_side_responsive

2018年4月
1234567
891011121314
15161718192021
22232425262728
2930  

アプリ情報

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