首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MiUi pre - Marshmallow中请求权限?

如何在MiUi pre - Marshmallow中请求权限?
EN

Stack Overflow用户
提问于 2016-09-13 12:32:57
回答 3查看 1.3K关注 0票数 3
代码语言:javascript
复制
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)

EN

回答 3

Stack Overflow用户

发布于 2017-07-19 19:23:25

在miui中,你需要在不同的way.You中询问权限,需要检查权限模式是否等于零。在上面的棉花糖中检查此函数的读取sms权限

代码语言:javascript
复制
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类。

票数 2
EN

Stack Overflow用户

发布于 2016-09-13 12:36:30

对于某些权限,我使用这样的方法:

代码语言:javascript
复制
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();

票数 0
EN

Stack Overflow用户

发布于 2017-03-29 14:40:54

对于下面的API 23,我们通常假设我们的应用程序将拥有清单中声明的所有权限,小米是一个例外。

您可以做的是将您的代码放在try catch块中,看看是否可以使用抛出的异常识别场景。

我没有这样的设备,所以不能测试这个。我猜它会抛出一个SecurityException

不过,对于接收短信的权限,我不认为你可以这样做。相反,应在安装时通知用户不要禁用权限。或者你可以要求用户将其设置为默认的短信应用程序。

一定要试一试,让我们知道!

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39462254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档