java-Android targetSdkVersion 23 checkSelfPermission方法

java-Android targetSdkVersion 23 checkSelfPermission方法,第1张

概述我正在检查Android6.0(API23)中的权限值.即使从应用程序设置启用或禁用权限,也始终获得0值.以下是我采取的步骤.联系人权限从设备设置->应用程序->中手动禁用我的应用程序->许可->禁用联系人权限.在代码行下面执行时,仍然在Android6.0中每次都得到0值.ContextCompat.checkS

我正在检查Android 6.0(API 23)中的权限值.即使从应用程序设置启用或禁用权限,也始终获得0值.

以下是我采取的步骤.

联系人权限从设备设置->应用程序->中手动禁用我的应用程序->许可->禁用联系人权限.

在代码行下面执行时,仍然在AndroID 6.0中每次都得到0值.

ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS)

下面是我的代码.我在主启动器活动类中定义的

// IDentifIEr for the permission requestprivate static final int WRITE_CONTACTS_PERMISSIONS_REQUEST = 9;........@OverrIDepublic voID onCreate(Bundle savedInstanceState) {....if (androID.os.Build.VERSION.SDK_INT <= androID.os.Build.VERSION_CODES.LolliPOP_MR1)    {        sharedPreferencesEditor.putBoolean(getString(R.string.ALLOW_ACCESS_PHONEBOOK), true);        sharedPreferencesEditor.commit();    }    else {        getPermissionToReadUserContacts();    }....}// Called when the user is performing an action which requires the app to read the// user's contactspublic voID getPermissionToReadUserContacts() {    // 1) Use the support library version ContextCompat.checkSelfPermission(...) to avoID    // checking the build version since Context.checkSelfPermission(...) is only available    // in Marshmallow    // 2) Always check for permission (even if permission has already been granted)    // since the user can revoke permissions at any time through Settings    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS)            != PackageManager.PERMISSION_GRANTED) {        // The permission is NOT already granted.        // Check if the user has been asked about this permission already and denIEd        // it. If so, we want to give more explanation about why the permission is needed.        if (shouldShowRequestPermissionRationale(                Manifest.permission.WRITE_CONTACTS)) {            // Show our own UI to explain to the user why we need to read the contacts            // before actually requesting the permission and showing the default UI        }        // Fire off an async request to actually get the permission        // This will show the standard permission request dialog UI        requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS},                WRITE_CONTACTS_PERMISSIONS_REQUEST);    }}// Callback with the request from calling requestPermissions(...)@OverrIDepublic voID onRequestPermissionsResult(int requestCode,                                       @NonNull String permissions[],                                       @NonNull int[] grantResults) {    // Make sure it's our original READ_CONTACTS request    if (requestCode == WRITE_CONTACTS_PERMISSIONS_REQUEST) {        if (grantResults.length == 1 &&                grantResults[0] == PackageManager.PERMISSION_GRANTED) {            Toast.makeText(this, "Write Contacts permission granted", Toast.LENGTH_SHORT).show();        } else {            Toast.makeText(this, "Write Contacts permission denIEd", Toast.LENGTH_SHORT).show();        }    } else {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);    }}

解决方法:

如果您以SDK 23(AndroID 6)为目标,则默认情况下(清单中的)所有权限都处于禁用状态,而如果targetSDK是22(AndroID 5.1),并且您的应用程序在AndroID 6上运行,则所有权限都可以通过启用用户安装应用程序时的默认设置,即使用户稍后撤消了权限,checkSelfPermission也会返回PERMISSION_GRANTED的错误值

也可以在PermissionChecker的文档中找到

In the new permission model permissions with protection level dangerous are runtime permissions. For apps targeting M and above the user may not grant such permissions or revoke them at any time. For apps targeting API lower than M these permissions are always granted as such apps do not expect permission revocations and would crash. Therefore, when the user disables a permission for a legacy app in the UI the platform disables the APIs guarded by this permission making them a no-op which is doing nothing or returning an empty result or default error.

总结

以上是内存溢出为你收集整理的java-Android targetSdkVersion 23 checkSelfPermission方法全部内容,希望文章能够帮你解决java-Android targetSdkVersion 23 checkSelfPermission方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1090439.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存