📅  最后修改于: 2023-12-03 15:07:07.722000             🧑  作者: Mango
在Android应用程序中,访问设备存储是常见的任务。然而,在Android 6.0(API级别23)及更高版本中,需要显式请求权限才能访问设备存储。本文将介绍如何请求并获取写存储权限。
Android提供了一种方便的方法来请求权限:使用ActivityCompat.requestPermissions()
方法。该方法接收两个参数:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
activity
:当前Activity实例。permissions
:所请求的权限。requestCode
:标识请求的代码,通常可以设置为自定义整数值。requestPermissions()
方法定义了一个系统对话框,询问用户是否同意授予权限。用户可以选择授予权限或拒绝。如果权限被授予,onRequestPermissionsResult()
方法将被调用,以通知应用程序授予了什么权限。
在onRequestPermissionsResult()
方法中,应将requestCode参数与请求代码相比较,以确定哪个权限已被授予。如果权限被授予,则应执行请求权限后续的代码。如果权限被拒绝,则应提示用户此功能无法使用。
以下是请求写存储权限的代码示例:
private static final int REQUEST_WRITE_STORAGE = 112;
private void requestWriteStoragePermission() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
} else {
// Permission has already been granted
performWrite();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_WRITE_STORAGE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
performWrite();
} else {
Toast.makeText(this, "Write permission denied", Toast.LENGTH_SHORT).show();
}
}
}
private void performWrite() {
// Write to storage
}
首先,定义一个整数常量REQUEST_WRITE_STORAGE
,表示我们请求的是写入存储权限。在requestWriteStoragePermission()
方法中,检查应用程序是否已授予写存储权限。如果没有授予权限,则调用ActivityCompat.requestPermissions()
方法请求写存储权限。如果权限已被授予,则执行performWrite()
方法来写入存储。
在onRequestPermissionsResult()
方法中,检查请求代码是否为REQUEST_WRITE_STORAGE
,并检查权限是否已被授予。如果权限已授予,则执行performWrite()
方法以执行写入存储操作。否则,会显示一个短暂的Toast消息,提示用户权限被拒绝。
本文介绍了如何使用ActivityCompat.requestPermissions()
方法请求写存储权限,并使用onRequestPermissionsResult()
方法处理授权结果。现在您已经了解了权限请求的基础知识,可以在您的应用程序中使用此技术来请求其他权限。