【问题标题】:Security Exception only on Android 6仅适用于 Android 6 的安全异常
【发布时间】:2016-01-08 21:42:19
【问题描述】:
java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations.

该应用在 Android 版本 5(Lollipop)上运行良好,但在 Android 版本 6 上出现安全异常。

【问题讨论】:

    标签: android android-6.0-marshmallow


    【解决方案1】:

    这是因为根据 android 6.0 的新权限模型,这些权限是危险权限。

    需要在运行时请求危险权限,并且每次使用前都应检查。

    您必须将您的实现更改为adapt new permission model

    【讨论】:

    • 如果您的目标是 API 23+,通常这应该是必要的。不过,我们在 Android 6 上也遇到过此类异常。猜测 Android 的后备实现中存在错误。
    【解决方案2】:

    关于你的活动:

    private static final int REQUEST_FINE_LOCATION=0
    ...
    loadPermissions(Manifest.permission.ACCESS_FINE_LOCATION,REQUEST_FINE_LOCATION);
    

    实施:

    private void loadPermissions(String perm,int requestCode) {
        if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) {
            if (!ActivityCompat.shouldShowRequestPermissionRationale(this, perm)) {
                ActivityCompat.requestPermissions(this, new String[]{perm},requestCode);
            }
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_FINE_LOCATION: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // granted
                }
                else{
                    // no granted
                }
                return;
            }
    
        }
    
    }
    

    【讨论】:

    • loadPermissions() 函数中,不应该有一个else 子句(当checkSelfPermission() 返回PackageManager.PERMISSION_GRANTED 你在哪里做你的许可方面的事情?onRequestPermissionsResult() 只会被调用在调用requestPermissions() 之后,所以在我描述的情况下什么都不会发生。
    • 只是主要思想一个例子,也许在某些情况下你已经编写了“else”实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多