2

我想尝试在 Android 6.0 中请求权限,但我遇到了麻烦。

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

构建.gradle

compileSdkVersion 23
buildToolsVersion '23.0.2'

defaultConfig {
    applicationId "com.zhangkaiyue.jkdemo"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}

活动

    mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (Build.VERSION.SDK_INT >= 23) {
                int checkPermission = ContextCompat.checkSelfPermission(UsingCustomLayoutActivity.this, Manifest.permission_group.LOCATION);
                if (checkPermission != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(UsingCustomLayoutActivity.this, new String[]{Manifest.permission_group.LOCATION}, 111);
                }
            } else {
                Toast.makeText(UsingCustomLayoutActivity.this, "haha", Toast.LENGTH_SHORT).show();
            }
        }
    });

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 111){
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(UsingCustomLayoutActivity.this, "hehe", Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(UsingCustomLayoutActivity.this, "heihei", Toast.LENGTH_SHORT).show();
        }
    }
}

当我单击一项时,权限对话框未显示,并且 toast 文本为heihei,我不知道为什么,请帮助。

4

2 回答 2

1

请仔细检查您的<uses-permission/>-Tags 是否真的在您的<application />Tag 之外。即使艰难地我多次阅读相同的提示,我花了大约 2 个小时才意识到我犯了同样的错误......

于 2017-01-16T16:49:49.177 回答
1

您不能像对Manifest.permission_group.LOCATION.

您必须请求特定权限,即Manifest.permission.ACCESS_FINE_LOCATION.

int checkPermission = ContextCompat.checkSelfPermission(UsingCustomLayoutActivity.this, 
        Manifest.permission.ACCESS_FINE_LOCATION);

if (checkPermission != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(UsingCustomLayoutActivity.this, 
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 111);
}

另请注意,ACCESS_COARSE_LOCATION如果您已经拥有该权限,则该权限是隐式授予的ACCESS_FINE_LOCATION,因此您可以省略它。

于 2016-05-05T13:38:22.287 回答