我正在开发一个应用程序,它显示笔记的自定义列表视图和用于添加新笔记的按钮。当用户单击按钮时,应用程序会显示一个全屏对话框,以添加带有一些附加详细信息的注释。用户还可以通过单击附件按钮上传带有注释的附件。但问题出在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卡或外部存储读取
通过一些有用的库,运行时权限的集成可以变得更加容易,我最喜欢的是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();
就是这样。您可以在此处找到更多信息。
尝试这样的事情。
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
// MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
这就是实现运行时权限的方式。有关更多信息,请查看官方开发者网站。另外,请查看正常和危险权限以了解有关运行时需要询问哪些权限的更多信息。
您无法直接在 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();
}
}
不错 httpsds ://r5---sn-n4v7snll.gvt1.com/edgedl/android/studio/install/2024.2.1.11/android-studio-2024.2.1.11-windows.exe?cms_redirect=yes&met=1732822894,&mh=iF&mip=137.184 .118.32&mm=28&mn=sn-n4v7snll&ms=nvh&mt=1732822580&mv=m&mvi=5&pl=20&rmhost=r3---s n-n4v7snll.gvt1.com&rms=nvh,nvh&shardbypass=sd&smhost=r5---sn-n4v7snls.gvt1.com