当 Min SDK 为 L 时请求对 Android M 的许可
Asking permission on Android M when Min SDK is L
我正在编写应 运行 在 Android L 和 M 上的应用程序。
你可能知道,对于 Android M 需要在代码中请求来自外部存储(sdcard)的 write\read 的许可,如下所示:
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED)
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
但是,我遇到了一个问题,因为调用 checkSelfPermission
需要 API 级别 23(而不是 22,因为我需要 Lollipop 支持)。
我尝试添加 @TargetApi(Build.VERSION_CODES.MNC)
但我遇到了另一个问题 - "Cannot resolved symbol MNC"
所以问题是,我如何编写代码将文件保存在 sdcard 中,用于 Lollipop 和 Marshmallow?
编辑:项目结构设置:
编译SDK版本:API 23:Android 5.X(MNC
最低 SDK 版本:API 22:Android 5.1 (Lollipop)
目标SDK版本:API 23:Android 5.X(MNC)
谢谢
您需要使用从 ContextCompat
派生的 ActivityCompat
。checkSelfPermission
在那里定义。您需要在 gradle 构建中包含 Android 支持库才能使用此 class.
dependencies {
...
compile 'com.android.support:appcompat-v7:23.1.1'
...
}
public class YourActivity extends ActivityCompat {
...
public void onStart() {
...
checkSelfPermission(...);
...
}
...
}
将编译版本更改为API 23(MARSHMALLOW)
并添加依赖关系
dependencies {
...
compile 'com.android.support:appcompat-v7:23.1.1'
...
}
并仅针对棉花糖设置条件
if (Build.VERSION.SDK_INT > 22) {
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// public void requestPermissions(@NonNull String[] permissions, int requestCode)
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
return;
}
}
这是因为 checkselfpermission 方法只在 marsmallow 中有效
我正在编写应 运行 在 Android L 和 M 上的应用程序。
你可能知道,对于 Android M 需要在代码中请求来自外部存储(sdcard)的 write\read 的许可,如下所示:
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED)
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
但是,我遇到了一个问题,因为调用 checkSelfPermission
需要 API 级别 23(而不是 22,因为我需要 Lollipop 支持)。
我尝试添加 @TargetApi(Build.VERSION_CODES.MNC)
但我遇到了另一个问题 - "Cannot resolved symbol MNC"
所以问题是,我如何编写代码将文件保存在 sdcard 中,用于 Lollipop 和 Marshmallow?
编辑:项目结构设置:
编译SDK版本:API 23:Android 5.X(MNC
最低 SDK 版本:API 22:Android 5.1 (Lollipop)
目标SDK版本:API 23:Android 5.X(MNC)
谢谢
您需要使用从 ContextCompat
派生的 ActivityCompat
。checkSelfPermission
在那里定义。您需要在 gradle 构建中包含 Android 支持库才能使用此 class.
dependencies {
...
compile 'com.android.support:appcompat-v7:23.1.1'
...
}
public class YourActivity extends ActivityCompat {
...
public void onStart() {
...
checkSelfPermission(...);
...
}
...
}
将编译版本更改为API 23(MARSHMALLOW) 并添加依赖关系
dependencies {
...
compile 'com.android.support:appcompat-v7:23.1.1'
...
}
并仅针对棉花糖设置条件
if (Build.VERSION.SDK_INT > 22) {
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// public void requestPermissions(@NonNull String[] permissions, int requestCode)
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
return;
}
}
这是因为 checkselfpermission 方法只在 marsmallow 中有效