我的测试设备上有 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;
}
}
构建.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
。根据文档,您只需要确认整个组的一项危险权限。
用户只需为每个权限组授予一次权限。如果您的应用请求该组中的任何其他权限(在您的应用清单中列出),系统会自动授予它们。