调用需要 API 级别 23(当前最低为 14):android.app.Activity#requestPermissions,checkSelfPermission [重复]
Posted
技术标签:
【中文标题】调用需要 API 级别 23(当前最低为 14):android.app.Activity#requestPermissions,checkSelfPermission [重复]【英文标题】:Call requires API level 23 (current min is 14): android.app.Activity#requestPermissions,checkSelfPermission [duplicate] 【发布时间】:2016-06-16 17:46:56 【问题描述】:我正在尝试添加运行时权限 android(6.0.1) API 23,如果我使用 SDK 版本(min 和目标版本均为 23)它可以正常工作,如下所示,
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="23" />
如果我更改 android:minSdkVersion(小于 23)
例如:
我收到以下错误:
调用需要 API 级别 23(当前最低为 14): android.app.Activity#requestPermissions,checkSelfPermission
对于以下2种方法,
1)requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS)
2)checkSelfPermission(permission)
我试过ActivityCompat.checkSelfPermission()
和ContextCompat.checkSelfPermission()
都不起作用。
我错过了什么无法理解..
【问题讨论】:
ContextCompat.checkSelfPermission() 正是您想要的,您能否更具体地说明它为什么不起作用? 您在使用 ActivityCompat 或 ContextCompat 时是否遇到任何错误?如果是,是什么错误? 以下是我在使用 ActivityCompat 时遇到的错误“ActivityCompat 类型的方法 checkSelfPermission(String) 未定义” 不是 ActivityCompat,是 ContextCompat。 @Egor 这个代码我正在使用 ContextCompat.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);以下是我得到的错误,“ContextCompat 类型的方法 requestPermissions(String[], int) 未定义” 【参考方案1】:检查目标 >=23 或简单地在您的方法上方添加以下行
@TargetApi(Build.VERSION_CODES.M)
例如,如果你正在检查存储权限,那么你可以参考这个函数,
@TargetApi(Build.VERSION_CODES.M)
public boolean CheckStoragePermission()
int permissionCheckRead = ContextCompat.checkSelfPermission(context,
Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissionCheckRead != PackageManager.PERMISSION_GRANTED)
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
Manifest.permission.READ_EXTERNAL_STORAGE))
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
ActivityCompat.requestPermissions((Activity) context,
new String[]Manifest.permission.READ_EXTERNAL_STORAGE,
Define.PERMISSION_STORAGE);
else
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions((Activity) context,
new String[]Manifest.permission.READ_EXTERNAL_STORAGE,
Define.PERMISSION_STORAGE);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
return false;
else
return true;
【讨论】:
感谢您的解决方案也有效 :) 我在哪里可以添加代码来处理用户拒绝权限的情况,比如退出应用程序?【参考方案2】:检查权限:
ContextCompat.checkSelfPermission(Context context, String permission)
请求权限:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
或在 support-v4 中 Fragment
requestPermissions(String[] permissions, int requestCode)
【讨论】:
【参考方案3】:试试这个方法
if (Build.VERSION.SDK_INT >= 23)
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED)
requestContactsPermissions1();
else
// your code
已编辑:
在较低级别(您的应用)build.gradle
中添加依赖项块:
compile 'com.android.support:appcompat-v7:23.1.1'
或仅在您需要设计支持库时添加以下内容
compile 'com.android.support:design:23.1.1'
使用上述之一
【讨论】:
以下是我在使用 ActivityCompat 时遇到的错误“ActivityCompat 类型的方法 checkSelfPermission(String) 未定义” @Joe:检查已编辑的答案 我认为最好使用更简单的替代方法 - 只需使用 @TargetApi(23) 注释类或方法,因为在 API 版本上自动授予少于 23 个权限,因此条件块没有意义。所以任何建议条件替代的人都有无用的代码缩进和可能无用的“else”块。【参考方案4】:这是因为在 API 23 中添加了checkSelfPermission()
。所以你必须有条件地编码:
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M)
//use checkSelfPermission()
else
//simply use the required feature
//as the user has already granted permission to them during installation
【讨论】:
以下是我在使用 ActivityCompat 时遇到的错误“ActivityCompat 类型的方法 checkSelfPermission(String) 未定义” @Joe 你看过这个吗? ***.com/a/34613112/5352802 看来我也有同样的问题,我用的是eclipse,请问如何添加,请详细说明。 @Joe 试试这个:***.com/a/17903778/5352802 谢谢你解决了我的问题:)【参考方案5】:调用请求权限前检查设备sdk
if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M)
//call the request permission here
【讨论】:
以上是关于调用需要 API 级别 23(当前最低为 14):android.app.Activity#requestPermissions,checkSelfPermission [重复]的主要内容,如果未能解决你的问题,请参考以下文章
调用需要 API 级别 24(当前最低为 8):新的 android.location.GnssStatus.Callback
如何修复 Android 中的“调用需要 API 级别 26(当前最低为 25)”错误
setAdapter“调用需要 API 级别 11(当前最低为 8):android.widget.AbsListView#setAdapter”?
调用需要 API 级别 21(当前最低为 17):android.hardware.camera2.CameraDevice.StateCallback