Zal*_*inh 58 android android-6.0-marshmallow runtime-permissions
我想用
在单个请求中使用
ActivityCompat.requestPermissions(Activity activity,new String permisionList[],int permissionRequestcode);
Run Code Online (Sandbox Code Playgroud)
但我的问题是,我只是请求一个权限,我读了关于组权限,但它只适用于由开发人员,喜欢CONTACT_GROUP : read_contact,write_contact
等决定的相同组.
我想创建自定义组权限,只向我询问一个请求并仅向我提供一个响应.
谢谢
Unc*_*ion 70
您可以在单个请求中询问多个权限(来自不同的组).为此,您需要将所有权限添加到您提供的字符串数组作为requestPermissions API的第一个参数,如下所示:
requestPermissions(new String[]{
Manifest.permission.READ_CONTACTS,
Manifest.permission.ACCESS_FINE_LOCATION},
ASK_MULTIPLE_PERMISSION_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,您将看到权限弹出窗口是多个权限弹出窗口的堆栈.当然,您需要处理每个权限的接受和拒绝(包括"永不再问")选项.同样经过精心解释了这里.
moh*_*hit 28
首先初始化权限请求代码
public static final int PERMISSIONS_MULTIPLE_REQUEST = 123;
Run Code Online (Sandbox Code Playgroud)
检查android版本
private void checkAndroidVersion() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
checkPermission();
} else {
// write your logic here
}
}
Run Code Online (Sandbox Code Playgroud)
检查多个权限代码
private void checkPermission() {
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.READ_EXTERNAL_STORAGE) + ContextCompat
.checkSelfPermission(getActivity(),
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale
(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) ||
ActivityCompat.shouldShowRequestPermissionRationale
(getActivity(), Manifest.permission.CAMERA)) {
Snackbar.make(getActivity().findViewById(android.R.id.content),
"Please Grant Permissions to upload profile photo",
Snackbar.LENGTH_INDEFINITE).setAction("ENABLE",
new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermissions(
new String[]{Manifest.permission
.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
PERMISSIONS_MULTIPLE_REQUEST);
}
}).show();
} else {
requestPermissions(
new String[]{Manifest.permission
.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
PERMISSIONS_MULTIPLE_REQUEST);
}
} else {
// write your logic code if permission already granted
}
}
Run Code Online (Sandbox Code Playgroud)
用户授予权限后回调方法
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_MULTIPLE_REQUEST:
if (grantResults.length > 0) {
boolean cameraPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean readExternalFile = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if(cameraPermission && readExternalFile)
{
// write your logic here
} else {
Snackbar.make(getActivity().findViewById(android.R.id.content),
"Please Grant Permissions to upload profile photo",
Snackbar.LENGTH_INDEFINITE).setAction("ENABLE",
new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermissions(
new String[]{Manifest.permission
.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
PERMISSIONS_MULTIPLE_REQUEST);
}
}).show();
}
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在这个阶段没有黑客可以规避来自不同组的权限.这就是android如何开发运行时权限的本质,让用户可以选择接受哪些权限.当然不接受应用程序所需的所有权限,可能会使应用程序无法正常工作.
CAMERA和WRITE_EXTERNAL_STORAGE都被视为危险权限,并且在单独的组中,因此都需要运行时权限请求.
一旦为特定组授予了权限,就不需要在应用程序运行的生命周期内再次请求它,或者如果作为默认设置提供它,则不再需要它.
你唯一能做的就是要求用户接受默认的决定,可以通过使用"再也不要问"来撤销这些决定.
归档时间: |
|
查看次数: |
92660 次 |
最近记录: |