ユーザーに権限チェックを依頼するベスト プラクティスと、ユーザーがその特定の権限アクセスを拒否した場合に実行するコードを知りたいです。
6681 次
6 に答える
7
この例では、CONTACTS
許可の状態を設定します
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 1;
private static String[] PERMISSIONS_CONTACT = {Manifest.permission.READ_CONTACTS}
if (checkSelfPermission(PERMISSIONS_CONTACT)) {
Log.i(TAG,
"Contact permissions have already been granted. Displaying contact details.");
} else {
Log.i(TAG, "Contact permissions has NOT been granted. Requesting permission.");
requestPermissions(PERMISSIONS_CONTACT, PERMISSIONS_REQUEST_READ_CONTACTS);
}
…
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_READ_CONTACTS: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! do the
// calendar task you need to do.
Log.d(TAG, "permission granted");
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Log.d(TAG, "permission denied");
}
return;
}
}
}
リンクをたどることができます http://www.applicoinc.com/blog/android-m-permissions-review/
于 2015-08-23T07:48:06.250 に答える
3
Dexterは、実行時にアクセス許可を要求するプロセスを簡素化する Android ライブラリです。
于 2016-01-22T14:26:16.520 に答える
1
いくつかのヒント:
- 許可が必要ですが、管理者があなたを担当しているため、Google Play Services で操作を呼び出す前に常に許可を確認してください。
- 付与されたパーミッションを求めないでください: 複数のパーミッションで request パーミッションを呼び出すと、システムは 1 つまたは 2 つのパーミッションが既に付与されているかどうかを気にしません。ダイアログはすべてに対して表示されます。そのため、本当に必要な権限のみを追跡してください。user grant が既にアクセス許可を付与されているのは奇妙かもしれません。
- メソッドを使用してユーザーに理由を示す必要があるかどうかを常に確認してください
shouldShowRequestPermissionRationale()
。許可を求めている理由が明確ではない可能性があります。 - バックグラウンドで権限を確認している場合、たとえばサービスでユーザーに通知を送信し、アプリの詳細システム アクティビティを直接タップして権限を付与できるようにします。
于 2015-08-24T16:25:26.603 に答える
0
たとえば、カメラ実行時のアクセス許可: このコードをカメラ ボタンのクリックに入力する必要があります。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
givePerMissons();
} else {
openCamera();
}
public void givePerMissons() {
if ((Utils.checkPermission(MainActivity.this, Manifest.permission.CAMERA)) {
openCamera();
} else {
Utils.givePermisson(MainActivity.this, Manifest.permission.CAMERA, Utils.PERMISSOIN);
if (!Utils.permissionsList.isEmpty()) {
requestPermissions(Utils.permissionsList.toArray(new String[Utils.permissionsList.size()]), Utils.PERMISSOIN_CODE);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case Utils.PERMISSOIN_CODE: {
if ((Utils.checkPermission(MainActivity.this, Manifest.permission.CAMERA)) {
openCamera();
} else {
Toast.makeText(getApplicationContext(),"Write Your message",Toast.LENGTH_LONG).show();
}
}
}
}
このコードを utils クラスに入れる必要があります:
public static final List<String> permissionsList = new ArrayList<String>();
public static void givePermisson(Context context, String permisson, String permissonType) {
int per = context.checkSelfPermission(permisson);
if (per != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permisson);
} else if (per != PackageManager.PERMISSION_DENIED) {
}
}
public static boolean checkPermission(Context context, String permission) {
try {
PackageManager pm = context.getPackageManager();
if (pm.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
return true;
} } catch (Exception e) {
e.printStackTrace();
}
return false;
}
于 2016-05-27T06:52:28.133 に答える
-1
if ( ActivityCompat.shouldShowRequestPermissionRationale (これ, Manifest.permission.CAMERA) || ActivityCompat.shouldShowRequestPermissionRationale (これ, Manifest.permission.RECORD_AUDIO) ) {
Toast.makeText (this,
R.string.permissions_needed,
Toast.LENGTH_LONG).show ();
} else {
ActivityCompat.requestPermissions (
this,
new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
CAMERA_MIC_PERMISSION_REQUEST_CODE);
}
于 2016-09-23T15:50:25.697 に答える