Android 11 获取U盘路径
时间: 2023-08-18 16:29:47 浏览: 384
在Android 11中,由于安全和隐私方面的考虑,应用程序不能直接访问外部存储设备的根目录。因此,您需要使用媒体存储API来获取U盘路径。具体步骤如下:
1. 添加以下权限到您的AndroidManifest.xml文件中:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
2. 通过MediaStore API查询外部存储设备的所有卷:
```java
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_NONE;
String[] projection = new String[]{MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.MIME_TYPE,
MediaStore.Files.FileColumns.SIZE,
MediaStore.Files.FileColumns.DATE_MODIFIED,
MediaStore.Files.FileColumns.DATA};
String sortOrder = MediaStore.Files.FileColumns.DATE_MODIFIED + " DESC";
Cursor cursor = getContentResolver().query(MediaStore.Files.getContentUri("external"), projection, selection, null, sortOrder);
```
3. 遍历查询结果,查找U盘路径:
```java
while (cursor.moveToNext()) {
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
if (path.startsWith("/storage/")) {
// 检查路径是否为U盘路径
File file = new File(path);
if (file.exists() && file.isDirectory() && file.canRead()) {
// 找到了U盘路径
String usbPath = file.getAbsolutePath();
break;
}
}
}
```
请注意,由于安全和隐私方面的考虑,上述代码只能在具有READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限的应用程序中运行,并且仅可以访问用户在系统文件管理器中授权的外部存储设备。如果用户未授权您的应用程序访问外部存储设备,则无法获取U盘路径。
阅读全文