17
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android の Runtime Permission を1行で対処

Last updated at Posted at 2017-12-09

ここ最近の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](https://developer.android.com/reference/android/app/Activity.html#onRequestPermissionsResult(int, java.lang.String[], int[]))の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にも登録できましたので、ライブラリのインストール方法を更新しました

17
13
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?