Android 如何使用compile sdk 22检查用户是否分配了权限?
注意:我知道权限模型在棉花糖中是如何工作的。请不要回答这个问题 我的应用程序使用compileSdk 22。我想编写一个实用程序来检测用户分配的权限。如果用户有棉花糖设备,那么他可以随时禁用权限。我尝试了下面的代码Android 如何使用compile sdk 22检查用户是否分配了权限?,android,permissions,Android,Permissions,注意:我知道权限模型在棉花糖中是如何工作的。请不要回答这个问题 我的应用程序使用compileSdk 22。我想编写一个实用程序来检测用户分配的权限。如果用户有棉花糖设备,那么他可以随时禁用权限。我尝试了下面的代码 if((packageManager.checkPermission(permissionName,context.getPackageName())== PackageManager .PERMISSION_GRANTED)){ // permission is
if((packageManager.checkPermission(permissionName,context.getPackageName())== PackageManager
.PERMISSION_GRANTED)){
// permission is granted
}else{
// permission is not granted.
}
对于Manifest.xml文件中声明的每个权限,此代码都返回true。如果我在棉花糖设备上运行此代码,然后手动禁用某些权限,那么对于禁用的权限,此代码也会返回true
因此,如果在compileSdk 23之前有任何方法,它可以告诉用户授予应用程序什么权限
注意:该方法不必是直接api。某种黑客行为也被允许。这是我的Splash活动中的一个例子 喷溅活动 稍后您将检查用户是否接受它 请求结果
我认为,对于这里的任何解决方案,您都需要将CompileSDK版本提高到23或更高,或者,您可以在具有用户权限的情况下使用。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_REQUEST);
}else {
startMain();
}
}else{
startMain();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == PERMISSION_REQUEST){
if(ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
startMain();
}else {
Toast.makeText(getApplicationContext(), "PERMISSIONS !!!", Toast.LENGTH_SHORT).show();
}
}
}