api 22上的Android M错误,找不到requestPermissions()方法

时间:2016-06-28 13:55:22

标签: android android-6.0-marshmallow android-permissions

我在API 22工作,但我想在Android M 6.0中编译我的项目,我有这个代码:

在顶部声明:

private static final String[] REQUIRED_PERMISSIONS = new String[]{"READ_EXTERNAL_STORAGE"};
private static final int REQUEST_PERMISSIONS = (Integer) null;

onCreate()上:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    LinkedList<String> missingPermissions = new LinkedList<>();
    for(String p : REQUIRED_PERMISSIONS){
        if(checkCallingOrSelfPermission(p) != PackageManager.PERMISSION_GRANTED){
            missingPermissions.add(p);
        }
    }
    if(!missingPermissions.isEmpty()){
        String[] mpArray = new String[missingPermissions.size()];
        missingPermissions.toArray(mpArray);
        requestPermissions(mpArray, REQUEST_PERMISSIONS);
    }
}

我受到启发here检查我的问题 并且在Eclipse中给我一个错误Build.VERSION_CODES.M(未找到M),然后,回调方法requestPermissions(mpArray, REQUEST_PERMISSIONS)也没有找到,有什么建议吗?

如果我正在使用API​​ 22,并且我正在使用Android 6.0 M进行编译。如何在API 22上正确解决READ_EXTERNAL_STORAGE等危险权限的问题?

1 个答案:

答案 0 :(得分:2)

根据文档,API级别23添加了Build.VERSION_CODES.MrequestPermissions()

由于您正在使用API​​级别22进行编译,因此它们根本不存在。

要访问API级别23中引入的API,您需要使用API​​ 23进行编译。如果继续使用API​​ 22进行编译,则无法访问这些API。

请注意,使用API​​ 23进行简单编译不会影响应用程序在任何设备上的行为方式,它只会打开较新的API供您在至少运行API 23的设备上使用。

  

如果我正在使用API​​ 22,并且我正在使用Android 6.0 M进行编译,那么我如何才能在API 22上正确解决READ_EXTERNAL_STORAGE等危险权限的问题?

运行API 22的设备将继续使用旧的安装时模型获取权限。运行API 22及更低版本的设备没有任何变化。只有运行API 23的设备才使用新的运行时权限模型。