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] リソースフォルダの修飾子

1 はじめに2 画面の向き3 画面サイズ4 テキスト入力方法5 複数修飾子の組み合わせ6 その他7 さいごに はじめに Androidアプリではリソースフォルダ名に修飾子をつけることによって、様々な環 ...

[Androidアニメーション]Shared Elements遷移

1 はじめに2 Shared Elements遷移とは3 layout xml4 Activity遷移5 その他6 さいごに はじめに 最近、雨が多いですね。そんな時は家にこもって、プログラミングをす ...

Kotlin MPAndroidChartライブラリを使い移動平均線を描画してみる。

1 はじめに2 MPAndroidChartライブラリについて2.1 ライブラリの導入2.2 描画の準備3 折れ線グラフを描画する3.1 LineChartの設定3.2 LineChart用のデータ作 ...

【Android】Firebase Cloud Storageに画像をアップロードする

1 はじめに1.1 Firebaseとは2 Firebase Cloud Storage を使う為の準備3 パーミッションの追加4 実装してみましょう4.1 今回作成するソースコード全容4.2 送信先 ...

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

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

フォロー

follow us in feedly

blog-page_side_responsive

東京改造計画(NewsPicks Book)
2018年4月
1234567
891011121314
15161718192021
22232425262728
2930 

アプリ情報

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