Help us understand the problem. What is going on with this article?

Android の Runtime Permission を1行で対処

More than 1 year has passed since last update.

ここ最近の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にも登録できましたので、ライブラリのインストール方法を更新しました

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした