![見出し画像](https://assets.st-note.com/production/uploads/images/58301228/rectangle_large_type_2_cd71b5dd3c3f7a53b8340bb935715e68.jpg?width=800)
Androidアプリ開発入門 (1) - PermissionsDispatcher
「PermissionsDispatcher」の使い方をまとめました。
・API 29: Android 10 (Q)
・PermissionsDispatcher 4.8.0
1. PermissionsDispatcher
「PermissionsDispatcher」は、複雑になりがちな、ユーザーからのアプリ権限の許可を得る処理を、アノテーションでシンプルに記述することができるライブラリです。
2. Androidのパーミッション
Androidのパーミッションには、「Normalパーミッション」と「Dangerousパーミッション」があります。
・Normalパーミッション : ユーザーがアプリをインストールするだけでアプリ権限が得られる。
・Dangerousパーミッション : ユーザーからアプリ権限の許可を得る必要がある。
主な「Dangerousパーミッション」は、次のとおりです。
・カレンダー
・android.permission.READ_CALENDAR
・android.permission.WRITE_CALENDAR
・カメラ
・android.permission.CAMERA
・アドレス帳
・android.permission.READ_CONTACTS
・android.permission.WRITE_CONTACTS
・android.permission.GET_ACCOUNTS
・位置情報
・android.permission.ACCESS_FINE_LOCATION
・android.permission.ACCESS_COARSE_LOCATION
・マイク
・android.permission.RECORD_AUDIO
・通話
・android.permission.READ_PHONE_STATE
・android.permission.CALL_PHONE
・android.permission.READ_CALL_LOG
・android.permission.WRITE_CALL_LOG
・android.permission.ADD_VOICEMAIL
・android.permission.USE_SIP
・android.permission.PROCESS_OUTGOING_CALLS
・センサー
・android.permission.BODY_SENSORS
・SMS
・android.permission.SEND_SMS
・android.permission.RECEIVE_SMS
・android.permission.READ_SMS
・android.permission.RECEIVE_WAP_PUSH
・android.permission.RECEIVE_MMS
・ストレージ
・android.permission.READ_EXTERNAL_STORAGE
・android.permission.WRITE_EXTERNAL_STORAGE
3. PermissionsDispatcherのインストール
「build.gradle (Module: XXXX.app)」に以下を追加し、「Sync Now」で同期します。
apply plugin: 'kotlin-kapt'
dependencies {
:
implementation "com.github.permissions-dispatcher:permissionsdispatcher:4.8.0"
kapt "com.github.permissions-dispatcher:permissionsdispatcher-processor:4.8.0"
}
4. PermissionsDispatcherの使い方
「PermissionsDispatcher」を使ってカメラのアプリ権限の許可を得るコードを実装してみます。
(1) AndroidManifest.xmlにパーミッションを追加。
今回は、カメラのパーミッションを追加します。
<uses-permission android:name="android.permission.CAMERA"/>
(2) MainActivityを以下のようにコードを記述。
package net.npaka.helloworld
import android.Manifest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import permissions.dispatcher.*
@RuntimePermissions
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
this.supportActionBar?.hide()
// showCamera()をパーミッションチェック付きで呼ぶ
showCameraWithPermissionCheck()
}
// 許可された時に呼ばれる
@NeedsPermission(Manifest.permission.CAMERA)
fun showCamera() {
Toast.makeText(this, "許可された", Toast.LENGTH_SHORT).show()
// カメラ処理をここに記述
}
// 説明が必要な時に呼ばれる
@OnShowRationale(Manifest.permission.CAMERA)
fun onCameraShowRationale(request: PermissionRequest) {
AlertDialog.Builder(this)
.setPositiveButton("許可") { _, _ -> request.proceed() }
.setNegativeButton("許可しない") { _, _ -> request.cancel() }
.setCancelable(false)
.setMessage("カメラを利用します")
.show()
}
// 拒否された時に呼ばれる
@OnPermissionDenied(Manifest.permission.CAMERA)
fun onCameraPermissionDenied() {
Toast.makeText(this, "拒否された", Toast.LENGTH_SHORT).show()
}
// 「今後表示しない」が選択された時に呼ばれる
@OnNeverAskAgain(Manifest.permission.CAMERA)
fun onCameraNeverAskAgain() {
Toast.makeText(this, "「今後表示しない」が選択された", Toast.LENGTH_SHORT).show()
}
}
処理の流れは、次のとおりです。
・showCameraWithPermissionCheck() : showCamera()をパーミッションチェック付きで呼ぶ
↓
パーミッションダイアログ
↓
・showCamera() : 許可された時に呼ばれる
・onCameraShowRationale() : 説明が必要な時に呼ばれる
・onCameraPermissionDenied() : 拒否された時に呼ばれる
・onCameraNeverAskAgain() : 「今後表示しない」が選択された時に呼ばれる
以下のアノテーションを付加することで、各メソッドに役割を割り当てています。
@RuntimePermissions (必須) : 権限を処理するActivityまたはFragmentに付加
@NeedsPermission (必須) : 権限が必要な処理を行うメソッドに付加。パーミッションチェック付きで呼ぶ場合は、このメソッドの名前にWithPermissionCheck()を付加したものを呼ぶ
@OnShowRationale : 説明が必要な時の処理を行うメソッドに付加
@OnPermissionDenied : 拒否された時の処理を行うメソッドに付加
@OnNeverAskAgain : 「今後表示しない」が選択された時の処理を行うメソッドに付加
(3) ビルド。
パーミッションチェックのメソッド(showCameraWithPermissionCheck())は「PermissionsDispatcher」で生成されるメソッドです。メソッド不明エラーで、ビルドできない場合は、「Build -> Rebuild Project」でリビルドします。
(4) 実行。
パーミッションダイアログが表示されることを確認します。
次回
この記事が気に入ったらサポートをしてみませんか?