Android 12 中读取 U 盘权限的实现

在 Android 12 中,为了增强安全性和用户隐私,官方对设备访问外部存储的权限进行了严格限制。在本篇文章中,我们将介绍如何在 Android 应用中读取 U 盘的权限,并提供代码示例及相关流程图。

1. 权限需求

在操作外部存储之前,首先需要在 AndroidManifest.xml 文件中声明必要的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

2. 申请权限

为了在运行时申请读取 U 盘权限,可以使用以下代码段:

private static final int REQUEST_CODE = 1001;

// 检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    // 申请权限
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE);
} else {
    // 权限已经被授予
    readUSBStorage();
}

3. 处理权限请求的结果

用户会被提示允许或拒绝权限请求,随后我们需要处理这个结果。可以重写 onRequestPermissionsResult 方法如下:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    if (requestCode == REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户同意权限
            readUSBStorage();
        } else {
            // 用户拒绝了权限
            Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show();
        }
    }
}

4. 读取 U 盘文件

一旦权限被授予,我们就可以访问 U 盘中的文件了。下面是一个读取文件的示例代码:

private void readUSBStorage() {
    File usbDir = new File("/storage/usb_storage");
    if (usbDir.exists() && usbDir.isDirectory()) {
        File[] files = usbDir.listFiles();
        if (files != null) {
            for (File file : files) {
                // 做相应的文件处理
                Log.i("USB File", file.getName());
            }
        }
    } else {
        Log.i("USB Storage", "U盘未连接或路径无效");
    }
}

5. 状态图

以下是应用的状态图,描述了权限请求与处理的状态。

stateDiagram
    [*] --> 请求权限
    请求权限 --> 权限授予
    请求权限 --> 权限拒绝
    权限授予 --> 读取文件
    权限拒绝 --> [*]

6. 流程图

下面是权限请求流程的图示:

flowchart TD
    A[用户启动应用] --> B{检查权限}
    B -- 是 --> C[读取U盘文件]
    B -- 否 --> D[请求权限]
    D --> E{用户同意?}
    E -- 是 --> C
    E -- 否 --> F[显示权限拒绝信息]
    F --> G[结束]
    C --> H[结束]

结尾

在 Android 12 中,读取 U 盘权限的过程较以往版本更加复杂,但通过申请权限和处理结果的方式,我们可以顺利实现文件读取功能。请确保在应用中合理处理用户的隐私及权限请求,以提升用户体验并遵循最佳实践。通过本文的示例代码和流程图,你应该能够快速上手 Android 12 的 U 盘权限读取。如果你有更多的问题或需求,欢迎继续交流!