调用需要 API 级别 23(当前最低为 14):android.app.Activity#requestPermissions,checkSelfPermission
Call requires API level 23 (current min is 14): android.app.Activity#requestPermissions,checkSelfPermission
我正在尝试添加 运行 时间权限 android(6.0.1) API 23,如果我使用 SDK 版本(min 和目标版本都是 23 ) 效果很好,如下所示,
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="23" />
如果我改变android:minSdkVersion(小于23)
例如:
我收到以下错误:
Call requires API level 23 (current min is 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()
都不起作用。
我想的没看懂..
调用请求权限前检查设备sdk
if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M)
{
//call the request permission here
}
试试这个方法
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'
使用以上之一
那是因为在API23中添加了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
}
检查目标 >=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;
}
检查权限:
ContextCompat.checkSelfPermission(Context context, String permission)
请求权限:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
或在 support-v4 中 Fragment
requestPermissions(String[] permissions, int requestCode)
我正在尝试添加 运行 时间权限 android(6.0.1) API 23,如果我使用 SDK 版本(min 和目标版本都是 23 ) 效果很好,如下所示,
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="23" />
如果我改变android:minSdkVersion(小于23)
例如:
我收到以下错误:
Call requires API level 23 (current min is 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()
都不起作用。
我想的没看懂..
调用请求权限前检查设备sdk
if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M)
{
//call the request permission here
}
试试这个方法
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'
使用以上之一
那是因为在API23中添加了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
}
检查目标 >=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;
}
检查权限:
ContextCompat.checkSelfPermission(Context context, String permission)
请求权限:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
或在 support-v4 中 Fragment
requestPermissions(String[] permissions, int requestCode)