Java
Android
Git
GitHub
AndroidStudio

Android の Runtime Permission を1行で対処

ここ最近のAndroidアプリを開発している際に、AndroidのRuntime Permissionに悩まされることがよくあります。

そのRuntime Permissionの対応に1行追加するだけでRuntime

Permissionに対応できるライブラリを作成しました。

https://github.com/TakuKobayashi/RuntimePermissionChecker

よかったら「スター」や「いいね」をいただいたり、「シェア」して拡散していたっだけたらと思いますm(_ _)m


導入方法


ダウンロード

build.gradle(以下の画像参照)

のdependenciesに以下の内容を追加


build.gradle

dependencies {

implementation 'net.taptappun.taku.kobayashi:runtimepermissionchecker:1.1.1'
}

これでAndroidのプロジェクトにライブラリが導入されます。


実装

ライブラリが導入されたら、自身のActivityに以下のような一例のように追加します。


MainActivity.java

public class MainActivity extends Activity {

private static final int REQUEST_CODE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
...
RuntimePermissionChecker.requestAllPermissions(this, REQUEST_CODE);
}
}


この

RuntimePermissionChecker.requestAllPermissions(Activity activity, int requestCode);

を任意の場所に加えることで後は自動的にAndroidのPermissionを確認する処理実行されます。

※あくまでAndroidのPermissionを確認するダイアログがでるようになるだけなので、以下のようにAndroidManifest.xmlにPermissionの設定の追記を忘れないようにお願いします


AndroidManifest.xml

<uses-permission android:name="パーミッション名" />



一括ではなく個別にPermissionを指定して聞きたい


MainActivity.java

public class MainActivity extends Activity {

private static final int REQUEST_CODE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
...
RuntimePermissionChecker.requestPermission(this, REQUEST_CODE, Manifest.permission.CAMERA);
}
}


この

RuntimePermissionChecker.requestPermission(Activity activity, int requestCode, String requestPermission);

を任意の場所に加えることで、上記の第3引数(String requestPermission)に個別に聞きたいPermission名を指定することで指定したPermissionを確認する処理実行されます。(上記の場合CameraのPermissionの確認画面が表示されます)


補足


Permissionが全て許可されたときに処理を実行したい

その場合は以下の例のようにonRequestPermissionsResultのcallbackが呼ばれたときに処理を実行するようにします。


MainActivity.java

public class MainActivity extends Activity {

private static final int REQUEST_CODE = 1;

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if (requestCode != REQUEST_CODE)
return;
if(!RuntimePermissionChecker.existConfirmPermissions(this)){
// write features you want to execute.
}
}
}


この

RuntimePermissionChecker.existConfirmPermissions(Activity activity);

はまだ聞くべきpermissionがある場合、tureになります。


個別のPermissionが許可されたかどうか確認したい

上記、全てのPermissionが許可された時ではなく、個別のPermissionが許可されたかを確認したい場合は

RuntimePermissionChecker.hasSelfPermission(Activity activity, String requestPermission);

このメソッドを使って確認することができます。このメソッドの第2引数に個別に確認したいPermission名

を指定し、すでに許可された場合、tureになります。


Android 6.0 Marshmallow(API Level 23)未満の場合は?

上記の処理にこの場合の対応も入っています。


すでにユーザーがpermissionを許可した後の場合は?

上記の処理にこの場合の対応も入っています。


そもそもRuntime Permissionって何?

Android 6.0 Marshmallow(API Level 23)以降では、アプリの実行時に特定の機能を使うときはユーザーの許可(パーミッション)を求める必要があり、そのユーザーの許可なしには機能が使えないようになりました。(カメラとかマイクとかSDカードに情報を保存したりだとか...)

要するにこんな感じのダイアログです。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f33343438382f32303466316232632d623732362d363466612d346235662d3639343333386565613136372e706e67.png

もちろん、このダイアログを出すためにはアプリ側で処理を書く必要があります。

より詳しくはこちらを参考

Androidのアプリの開発を多く行い、Android 2系の頃からAndroidアプリの開発をしている身としてはこのRuntime Permissionの実装など考えたくもないので、最大限の譲歩として、なんとか1行追加だけですましたかったです。

そのため、どんなアプリを作る場合においても


  • とりあえずこのライブラリをいれておく

  • とりあえずこのメソッドをよぶ

ということで全て解決してくれるようなものにしてみました。

※なお今回が初めてのAndroidライブラリの公開につき、以下様々な記事を参考いたしました


参考


追記

2017/12/13(水) Bintrayに登録できました。またjcenterにも登録できましたので、ライブラリのインストール方法を更新しました