在Android 6(Marshmallow)中,即使用户在安装时接受了您的所有权限,他们仍可以稍后决定从您手中夺走其中一些权限。
快速解决方案,但不建议使用:也许如果targetSdkVersion将gradle 更改为22,则问题将得到解决。
如何实施?(最佳做法)
首先确定用户的设备是否为棉花糖设备:
private boolean shouldAskPermission(){
return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);
}
如果shouldAskPermission()返回true,则需要您的许可:
String[] perms = {"android.permission.WRITE_EXTERNAL_STORAGE"};
int permsRequestCode = 200;
requestPermissions(perms, permsRequestCode);
该方法requestPermissions(String[] permissions, int requestCode);是在Android Activity类内部找到的公共方法。
您将在onRequestPermissionResult方法中收到请求的结果,如下所示:
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
switch(permsRequestCode){
case 200:
boolean writeAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;
break;
}
}
收到结果后,您将需要适当地处理它们。
更多信息:
使用棉花糖设备的用户现在可以通过应用程序设置撤消危险权限
Android将某些权限定义为“ 危险 ”,将某些权限定义为“ 普通”。这两个都在您的应用程序清单中都是必需的,但是只有危险权限才需要运行时请求。
如果您选择不实施新的权限模型(运行时请求),则权限的撤消可能导致不必要的用户体验,并且在某些情况下会导致应用程序崩溃。
下表列出了所有当前的危险权限及其各自的组:
如果用户在组/类别中接受一个权限,则他们将接受整个组!
资料来源:http://www.captechconsulting.com
使用德克斯特图书馆:
您可以使用Dexter。Android库可简化运行时的权限请求过程。