【发布时间】:2016-12-01 04:39:42
【问题描述】:
我的测试设备上有 Android N Developer 预览版,我在应用启动期间请求运行时权限。
但不幸的是,该应用没有显示用于授予权限的警报对话框。我正在使用以下代码:
启动器活动
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
if(checkPermissions()) {
renderView();
}
}
private boolean checkPermissions() {
int permissionWriteStorage = ContextCompat.checkSelfPermission(this, Manifest.permission_group.STORAGE);
int permissionPhoneState = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
Log.i("permission",(permissionWriteStorage == PackageManager.PERMISSION_GRANTED) + "");
//This prints false
List<String> listPermissionsNeeded = new ArrayList<>();
if (permissionWriteStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission_group.STORAGE);
}
if (permissionPhoneState != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (!listPermissionsNeeded.isEmpty()) {
Log.i("permission", "in if");
//I get this in the logs
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
}
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId 'com.***.***'
minSdkVersion 16
targetSdkVersion 24
}
}
编辑:解决方案 (1/2)
通过将构建工具版本更改为24.0.1,我收到了READ_PHONE_STATE 权限的警报,但没有收到权限组STORAGE 的警报。
需要对权限组的每个权限分别询问吗?
编辑 2:解决方案 (2/2)
我设法通过将Manifest.permission_group.STORAGE 替换为Manifest.permission.WRITE_EXTERNAL_STORAGE 来解决它。根据文档,您只需要确认整个组的一项危险权限即可。
用户只需为每个权限组授予一次权限。如果您的应用请求该组中的任何其他权限(在您的应用清单中列出),系统会自动授予它们。
【问题讨论】:
标签: android android-permissions android-7.0-nougat