1. ホーム
  2. java

[解決済み] Android 6.0 マルチパーミッション

2022-04-20 15:12:44

質問

Android 6.0には新しいパーミッションがあり、次のようなもので呼び出せることは知っています。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
    PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
        new String[] { 
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        }, PERMISSION_WRITE_STORAGE);
}

今日、連絡先、SMS、カメラの3つのパーミッションを必要とするGoogleアプリを見ました。それは1-3ページを作り、それらを同時に呼び出して有効化しているのです。

誰か、SMS、カメラ、連絡先、ストレージのような4つの権限を同時に呼び出して有効にする方法を教えてください。

例(googleアプリの名前を忘れてしまった :( )

このアプリには、SMS、連絡先、カメラが必要です。

アプリは私に(そしてダイアログ1-3ページを作りました)SMSの有効化、連絡先の有効化、そしてカメラの有効化を求めました。 このGoogleアプリは3つの必要な権限を一緒に呼び出していたので、私の質問は、私は同じことを達成することができますどのようにですか?

解決方法を教えてください。

4つのパーミッションすべてを ActivityCompat.requestPermissions(...) を呼び出すと、Androidはあなたが言ったように自動的にそれらをまとめてページングします。

複数のパーミッションをチェックし、どれかが許可されていないことを確認するヘルパーメソッドを用意しています。

public static boolean hasPermissions(Context context, String... permissions) {
    if (context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

あるいはKotlinで。

fun hasPermissions(context: Context, vararg permissions: String): Boolean = permissions.all {
    ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}

そして、すべてのパーミッションを送信するだけです。 Androidは必要なものだけを要求してきます。

// The request code used in ActivityCompat.requestPermissions()
// and returned in the Activity's onRequestPermissionsResult()
int PERMISSION_ALL = 1; 
String[] PERMISSIONS = {
  android.Manifest.permission.READ_CONTACTS, 
  android.Manifest.permission.WRITE_CONTACTS, 
  android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 
  android.Manifest.permission.READ_SMS, 
  android.Manifest.permission.CAMERA
};

if (!hasPermissions(this, PERMISSIONS)) {
    ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}