如何在棉花糖中一次向用户显示所有接受权限?
How can show all permission to user for acceptation at one time in marshmallow?
我的app有10个权限,可以一一提示。但我希望在提示用户后获得 10 个权限,以便他可以在应用启动时接受权限。
提前致谢
我已经创建了一个运行时权限助手,它完全可以满足您的需求。
你可以在这里找到它 - https://gist.github.com/passiondroid/cd2ad32e7ba26f4e47ae
添加此 class 并根据您的权限进行修改后。您可以在 activity 中添加以下代码,您需要询问所有权限
runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
//All permissions available. Do what you want.
} else {
runtimePermissionHelper.setActivity(this);
runtimePermissionHelper.requestPermissionsIfDenied();
}
在同一个 activity 中覆盖此方法以在获得用户 accepts/rejects 权限后获得回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Map<String, Integer> perms = new HashMap<String, Integer>();
// Fill with results*/
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
boolean isAllPermissionsAllowed = false;
for(int i : grantResults){
if(i==PackageManager.PERMISSION_GRANTED){
isAllPermissionsAllowed = true;
}else{
isAllPermissionsAllowed = false;
break;
}
}
if(isAllPermissionsAllowed){
//All permissions available. Do what you want.
} else {
// Permission Denied. Show error page
Intent intent = new Intent(this,ErrorActivity.class);
intent.putExtra("permissions_denied",true);
startActivity(intent);
finish();
}
}
requestPermissions
将字符串数组作为第一个参数,所以...
requestPermissions(new String[]{Manifest.permission.X, Manifest.permission.Y}, requestCode);
但是...
运行时权限的全部意义在于,在您的应用真正需要它们之前,用户不需要授予它们。
您可以通过这种方式同时请求多个权限:
(我目前是这样用的)
String[] PERMISSIONS_ARRAY = {Manifest.permission.X, Manifest.permission.Y, Manifest.permission.Z};
然后我有一个函数:
void checkRuntimePermissions(){
if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.X)
!= PackageManager.PERMISSION_GRANTED) && ActivityCompat.checkSelfPermission ...) {
//modify the array acc to permission granted or not
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.X) && ActivityCompat.shouldShowRequestPermissionRationale...{
ActivityCompat.requestPermissions(Activity.this, PERMISSIONS_ARRAY,
REQUEST_CODE_PERMISSIONS);
} ..}
并通过实施 ActivityCompat.OnRequestPermissionsResultCallback 验证请求...
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE_PERMISSIONS) {
// if we have requested multiple permissions, all of them need to be
// checked.
if (PermissionUtil.verifyPermissions(grantResults)) {...
我希望我们能从 o.s 得到一个自动检查。调用 requestPermissions...
时,我们不必检查是否允许权限。
我的app有10个权限,可以一一提示。但我希望在提示用户后获得 10 个权限,以便他可以在应用启动时接受权限。
提前致谢
我已经创建了一个运行时权限助手,它完全可以满足您的需求。 你可以在这里找到它 - https://gist.github.com/passiondroid/cd2ad32e7ba26f4e47ae
添加此 class 并根据您的权限进行修改后。您可以在 activity 中添加以下代码,您需要询问所有权限
runtimePermissionHelper = RuntimePermissionHelper.getInstance(this);
if (runtimePermissionHelper.isAllMCPermissionAvailable()) {
//All permissions available. Do what you want.
} else {
runtimePermissionHelper.setActivity(this);
runtimePermissionHelper.requestPermissionsIfDenied();
}
在同一个 activity 中覆盖此方法以在获得用户 accepts/rejects 权限后获得回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Map<String, Integer> perms = new HashMap<String, Integer>();
// Fill with results*/
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
boolean isAllPermissionsAllowed = false;
for(int i : grantResults){
if(i==PackageManager.PERMISSION_GRANTED){
isAllPermissionsAllowed = true;
}else{
isAllPermissionsAllowed = false;
break;
}
}
if(isAllPermissionsAllowed){
//All permissions available. Do what you want.
} else {
// Permission Denied. Show error page
Intent intent = new Intent(this,ErrorActivity.class);
intent.putExtra("permissions_denied",true);
startActivity(intent);
finish();
}
}
requestPermissions
将字符串数组作为第一个参数,所以...
requestPermissions(new String[]{Manifest.permission.X, Manifest.permission.Y}, requestCode);
但是...
运行时权限的全部意义在于,在您的应用真正需要它们之前,用户不需要授予它们。
您可以通过这种方式同时请求多个权限:
(我目前是这样用的)
String[] PERMISSIONS_ARRAY = {Manifest.permission.X, Manifest.permission.Y, Manifest.permission.Z};
然后我有一个函数:
void checkRuntimePermissions(){
if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.X)
!= PackageManager.PERMISSION_GRANTED) && ActivityCompat.checkSelfPermission ...) {
//modify the array acc to permission granted or not
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.X) && ActivityCompat.shouldShowRequestPermissionRationale...{
ActivityCompat.requestPermissions(Activity.this, PERMISSIONS_ARRAY,
REQUEST_CODE_PERMISSIONS);
} ..}
并通过实施 ActivityCompat.OnRequestPermissionsResultCallback 验证请求...
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE_PERMISSIONS) {
// if we have requested multiple permissions, all of them need to be
// checked.
if (PermissionUtil.verifyPermissions(grantResults)) {...
我希望我们能从 o.s 得到一个自动检查。调用 requestPermissions...
时,我们不必检查是否允许权限。