从Android中的自定义对话框请求运行时权限

时间:2016-10-22 04:45:02

标签: android dialog android-permissions

我正在开发一个应用程序,它显示自定义的注释列表视图和一个用于添加新注释的按钮。当用户单击按钮时,应用程序会显示一个全屏对话框,以添加一些附加细节的注释。用户还可以通过单击附件按钮上传带附注的附件。但问题出在 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卡或外部存储中读取

3 个答案:

答案 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();
    }
}