我正在开发一个应用程序,它显示自定义的注释列表视图和一个用于添加新注释的按钮。当用户单击按钮时,应用程序会显示一个全屏对话框,以添加一些附加细节的注释。用户还可以通过单击附件按钮上传带附注的附件。但问题出在 Android M(API 23)之后,此任务需要运行时权限。
根据Google Developers,权限请求的结果将以onRequestPermissionsResult()
方式传递。我不知道如何在我用于显示全屏对话框的方法中获得此结果。
这就是我的方法的样子:
private void showCreateNoteDialog() {
//create dialog body...
final Dialog createDialog = new Dialog(NotesActivity.this,R.style.MyFullscreenDialog);
createDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
LayoutInflater inflater = this.getLayoutInflater();
createDialog.setContentView(inflater.inflate(R.layout.customdialog_createNote, null));
createDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);}
修改:
上传文件的权限要求从Sd卡或外部存储中读取
答案 0 :(得分:2)
使用一些有用的库可以更轻松地集成运行时权限,我最喜欢的是PermissionUtils。
您需要做的就是在应用级build.gradle
dependencies {
compile 'rebus:permission-utils:1.0.3'
}
然后在您活动的onCreate
PermissionManager.with(YourActivity.this)
.permission(PermissionEnum.READ_PHONE_STATE, PermissionEnum.READ_EXTERNAL_STORAGE) // You can put all permissions here
.askagain(true)
.ask();
就是这样。您可以找到更多信息here。
答案 1 :(得分:0)
尝试这样的事情。
(?)
这是您实现运行时权限的方式。有关详细信息,请查看official developer site。另外,请查看Normal and Dangerous Permissions以了解有关在运行时需要提出哪些权限的更多信息。
答案 2 :(得分:0)
您无法直接在showCreateNoteDialog方法中获得结果,但这是您可以做的(伪代码):
showCreateNoteDialog() {
/* some code goes here */
if (checkPermission) {
newMethodCalledFromNoteDialog();
} else {
requestPermission();
// return?
}
}
newMethodCalledFromNoteDialog() {
// part of code which needs permission
// some code depending on previous code
}
onRequestPermissionsResult() {
if (permissionGranted) {
newMethodCalledFromNoteDialog();
}
}