🎃

[Android][kotlin]Permissionのサンプル

に公開

AndroidのPermission処理フロー、美しくないなぁと思いながら実装してたけど、やっと自分で納得する形の実装が見えてきたので、サンプルコードを公開してみた。

https://github.com/aaaa1597/AndKot-PermissionSample.git

Abstract

  • AndroidでPermission承認の自分的スマート実装のサンプル
  • その説明

背景

Androidアプリ開発で、カメラやらBLUETOOTHやら使うとPermissionのユーザー承認が必ず必要になるんだけど、ソースコードが全然スマートじゃない。その理由は承認処理は流れが分散してて、可読性が分かりにくくなってるというか。そんな感じ。
例えばVuforiaライブラリを使うんだけど、これは裏でカメラを使うのでCAMERA権限承認後じゃないと初期化できない。一方でUIスレッドは、それらに関係なくどんどん進むので初期化できないオブジェクトが不定なまま停止させとくとかのいびつで変な対応が必要で、初期化シーケンスがカオスになったりする。

概要

で、もうその部分はAndroid推奨コードがそうなので諦めるとして、それらスパゲティな処理フローをそれ専用のFragmentにまとめてしまえばすっきりすることに気づいた!!
承認専用Fragment(PermissionsFragment) → 権限解決 → Main処理Fragment(MainFragment)に遷移。これですっきり。
という事でソースコードはページ上部のgithubに公開しました。
※何を今さらというのは置いといて。

使い方(というか拡張ポイント)

プロジェクト毎に必要な権限は変化するはずなので、Permissionリストのところが変更点になる。
具体的には下記2つ。

  1. PermissionsFragment.ktのpermission配列
PermissionsFragment.kt(22)
val REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.CAMERA, Manifest.permission.INTERNET)
  1. AndroidManifest.xmlの権限宣言
AndroidManifest.xml
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />

以上。これで権限処理がはかどるはず。
お役に立ちますように。。。

Discussion