int permissionCheck = ContextCompat.checkSelfPermission(mActivity, Manifest.permission.RECEIVE_SMS);
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_CONTACTS},
PERMISSION_REQUEST_CODE);
Log.d(TAG, permissionCheck + "");权限检查总是返回PERMISSION_GRANTED,但在操作系统(MiUi)中,应用程序没有权限。
测试设备: Redmi Note 3 Pro (MIUI 8)
发布于 2017-07-19 19:23:25
在miui中,你需要在不同的way.You中询问权限,需要检查权限模式是否等于零。在上面的棉花糖中检查此函数的读取sms权限
private boolean checkUsagePermission() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = 0;
mode = appOps.checkOpNoThrow("android:read_sms", android.os.Process.myUid(), getPackageName());
boolean granted = mode == AppOpsManager.MODE_ALLOWED;
if (!granted) {
//write your code for accept that permission
return false;
}
}
return true;
}一旦你在你的android studio中查看了AppOpsManager类。
发布于 2016-09-13 12:36:30
对于某些权限,我使用这样的方法:
private boolean permissionsActivated = (Build.VERSION.SDK_INT < Build.VERSION_CODES.M);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//....
requirepermissionsifneeded();
//....
}
@SuppressLint("NewApi")
private void requirepermissionsifneeded() {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!canAll()) {
permissionsActivated = false;
requestPermissions(INITIAL_PERMS, REQUESTPERM);
}
else {
permissionsActivated = true;
}
} else {
permissionsActivated = true;
}
}
@SuppressLint("NewApi")
private boolean hasPermission(String perm) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return (PackageManager.PERMISSION_GRANTED == checkSelfPermission(perm));
} else {
return true;
}
}
private boolean canAll() {
// TODO Auto-generated method stub
return (canAccessLocation() && canCoarseLocation() && canGetAccounts());
}
private boolean canAccessLocation() {
return hasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION);
}
private boolean canCoarseLocation() {
return hasPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION);
}
private boolean canGetAccounts() {
return hasPermission(android.Manifest.permission.GET_ACCOUNTS);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// TODO Auto-generated method stub
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUESTPERM: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionsActivated = true;
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this, ":(", Toast.LENGTH_LONG).show();
permissionsActivated = false;
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}代码中的某处
permissionsActivated = canAll();
发布于 2017-03-29 14:40:54
对于下面的API 23,我们通常假设我们的应用程序将拥有清单中声明的所有权限,小米是一个例外。
您可以做的是将您的代码放在try catch块中,看看是否可以使用抛出的异常识别场景。
我没有这样的设备,所以不能测试这个。我猜它会抛出一个SecurityException。
不过,对于接收短信的权限,我不认为你可以这样做。相反,应在安装时通知用户不要禁用权限。或者你可以要求用户将其设置为默认的短信应用程序。
一定要试一试,让我们知道!
https://stackoverflow.com/questions/39462254
复制相似问题