我正在针对Android 6.0上的新权限模型检查我的应用程序权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
使用Appcompatv7-r23在API23上定位应用,在仿真器设备Android 6.0上通过adb安装已签名的应用并运行它: 在运行时没有任何新的事情发生,该应用程序在API 23之前运行良好,似乎所有这些权限都会在安装时自动授予。
我为RECORD_AUDIO权限插入ContextCompat.checkSelfPermission()
,很快就会返回&#34; PERMISSION_GRANTED&#34;。
这三个权限是否可能被新权限模型保留为不危险? 我的是有效的测试吗?
答案 0 :(得分:0)
它仍处于危险类别,并且在安装时未授予这些应用,仅限Android M
答案 1 :(得分:0)
您需要在M设备上运行才能查看行为。较旧的SDK手机将授予安装权限。这些权限需要实现新模型,否则您在新设备上安装后应用程序将崩溃。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
您需要在需要时检查每个权限,然后在获得权限的情况下使用回调方法来实现功能。
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// Explain to the user why we need to read the write to storage
}
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_WRITE_EXTERNAL_STORAGE);
// MY_PERMISSIONS_WRITE_EXTERNAL_STORAGE is an
// app-defined int constant
return;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_WRITE_EXTERNAL_STORAGE: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! do the
// calendar task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'switch' lines to check for other
// permissions this app might request
}
}
答案 2 :(得分:0)
我的测试无效,因为模拟器没有在API23平台上运行,尽管我在设备的定义上选择了API23。