首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >checkSelfPermission为撤销的targetSdkVersion <= 22权限返回PERMISSION_GRANTED

checkSelfPermission为撤销的targetSdkVersion <= 22权限返回PERMISSION_GRANTED
EN

Stack Overflow用户
提问于 2015-10-09 21:11:22
回答 2查看 7.7K关注 0票数 18

我正在研究Android棉花糖的新权限模型,但我面临着一个我觉得奇怪的问题。

一个带有targetSdkVersion 22的应用程序(所以还没有使用Android Marshmallow的新权限模型)在清单中声明了READ_CONTACTS权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_CONTACTS" />

并尝试通过Intent.ACTION_PICK读取联系人的电话号码

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT_REQUEST);

在装有MRA58K的设备上运行时,在通过ADB安装应用程序后撤销权限后,ContextCompat.checkSelfPermission()方法仍然返回PERMISSION_GRANTED,但稍后访问联系人时操作失败,因为返回的游标没有记录。据我所知,这是默认的“回溯兼容性”策略,以避免遗留应用程序崩溃。

代码语言:javascript
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_CONTACT_REQUEST && resultCode == Activity.RESULT_OK) {
        Log.i("", "Permission granted: " + (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED));
        Uri contactUri = data.getData();
        Cursor c = null;
        try {
            c = getContentResolver().query(contactUri, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
            if (c != null && c.moveToFirst()) {
                Log.i("", "got phone number: " + c.getString(0));
            } else {
                Log.w("", "No data received");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (c != null) {
                c.close();
            }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

在尝试操作之前,如何安全地检测用户是否在权限之前显式地进行了检查?

我还在https://github.com/googlesamples/android-RuntimePermissions上尝试了官方的谷歌样例,将targetSdkVersion设置为22,结果相同:即使用户撤销了权限,它也会记录权限被授予,然后操作失败。

谢谢;)

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

https://stackoverflow.com/questions/33039188

复制
相关文章

相似问题

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