gpt4 book ai didi

android - Intent ACTION_OPEN_DOCUMENT_TREE 似乎没有返回驱动器的真实路径

转载 作者:搜寻专家 更新时间:2023-11-01 07:46:00 25 4
gpt4 key购买 nike

我正在尝试从连接到我的 Google Pixel 的 USB 存储设备读取文件。我目前正在使用这种方法来选择驱动器的路径,以便我可以查询它的内容

private static final String TAG = "MainActivity";
private static final int REQUEST_CHOOSE_DRIVE = 1;
private TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.text);

Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

startActivityForResult(i, REQUEST_CHOOSE_DRIVE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CHOOSE_DRIVE) {

Uri uri = data.getData();

}
}

但是,Uri 看起来像 /tree/...,它似乎不是 Android 文件系统中的真实路径(通过 adb shell 验证) ).如何使用此 uri 查询可移植存储设备的内容?我尝试使用给出的答案 here但链接函数返回 null

最佳答案

您正在获取树 Uri。所以你需要添加下面的代码来从 Tree Uri 中获取文件。

        DocumentFile documentFile = DocumentFile.fromTreeUri(this, uri);
for (DocumentFile file : documentFile.listFiles()) {

if(file.isDirectory()){ // if it is sub directory
// Do stuff with sub directory
}else{
// Do stuff with normal file
}

Log.d("Uri->",file.getUri() + "\n");

}

要查询内容,可以使用下面的代码。

ContentResolver contentResolver = getActivity().getContentResolver();
Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri,
DocumentsContract.getTreeDocumentId(uri));
Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(uri,
DocumentsContract.getTreeDocumentId(uri));
Cursor docCursor = contentResolver.query(docUri, new String[]{
Document.COLUMN_DISPLAY_NAME, Document.COLUMN_MIME_TYPE}, null, null, null);
try {
while (docCursor.moveToNext()) {
Log.d(TAG, "found doc =" + docCursor.getString(0) + ", mime=" + docCursor
.getString(1));

}
} finally {
// close cursor
}

可以查看谷歌示例代码: https://github.com/googlesamples/android-DirectorySelection/blob/master/Application/src/main/java/com/example/android/directoryselection/DirectorySelectionFragment.java#L150

关于android - Intent ACTION_OPEN_DOCUMENT_TREE 似乎没有返回驱动器的真实路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44185477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com