android 11 反射调用U盘路径
时间: 2023-08-02 07:34:10 浏览: 204
在 Android 11 中,由于隐私保护机制的加强,对于外部存储的访问权限受到了限制,因此我们不能直接通过反射访问 U 盘路径。不过,我们可以通过 MediaStore API 来获取 U 盘路径,具体实现步骤如下:
1. 首先,我们需要检查 U 盘是否已经挂载。可以通过以下代码实现:
```java
File[] externalStorageVolumes = ContextCompat.getExternalFilesDirs(context, null);
File primaryStoragePath = externalStorageVolumes[0];
File secondaryStoragePath = externalStorageVolumes.length > 1 ? externalStorageVolumes[1] : null;
if (secondaryStoragePath != null && !primaryStoragePath.equals(secondaryStoragePath)) {
// U 盘已挂载
String usbPath = secondaryStoragePath.getAbsolutePath();
Log.d(TAG, "USB Path: " + usbPath);
} else {
// U 盘未挂载
Log.d(TAG, "USB not found!");
}
```
2. 如果 U 盘已经挂载,我们可以通过 MediaStore API 查询 U 盘路径。可以通过以下代码实现:
```java
Cursor cursor = context.getContentResolver().query(MediaStore.Files.getContentUri("external"), new String[]{MediaStore.Files.FileColumns.DATA}, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
if (filePath.startsWith(usbPath)) {
// 找到了 U 盘路径
Log.d(TAG, "USB Path: " + filePath);
break;
}
}
cursor.close();
}
```
需要注意的是,以上代码仅供参考,具体实现可能会因为不同的 Android 版本、不同的设备等因素而有所差异,具体实现时还需根据实际情况进行调整。
阅读全文