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] KotlinでTextToSpeech

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

AndroidでWebViewを使用するときに気をつけたいポイント追加4選!

1 はじめに2 Cookie2.1 Cookieを設定する2.2 Cookieを取得する3 ハンドリングの効かないページ遷移3.1 POSTでのページ遷移3.2 PDFなど、WebViewで開くことの ...

【Kotlin】FirebaseAuthenticationでGoogle・Facebook連携する

1 はじめに2 Firebaseプロジェクトの設定3 build.gradleに追記4 Googleログイン5 Facebookログイン6 さいごに7 参考8 おすすめ書籍 はじめに はじめまして。m ...

Flutterでテストコードを書こう! 単体テスト・Widgetテスト・インテグレーションテスト

1 はじめに2 単体テスト2.1 testパッケージの利用2.2 テストの書き方2.3 テストの実行2.4 モック化2.4.1 mockitoの導入2.4.2 メソッドのモック化3 Widgetテスト ...

Flutter開発のはじめかた 開発環境セットアップ〜Widtgetの解説

1 はじめに2 セットアップ2.1 Flutterのインストール2.1.1 Android環境のセットアップ2.1.2 Xcodeのインストール2.1.3 IDEのセットアップ(Android Stu ...

フォロー

blog-page_side_responsive

2018年4月
1234567
891011121314
15161718192021
22232425262728
2930  

アプリ情報

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