gpt4 book ai didi

java - 从 SAF 内容 URI 中提取文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:50 24 4
gpt4 key购买 nike

大家好,我的 stackoverflows,

我正在编写一个应用程序,我在其中实现了一个处理共享 Intent 的 Activity 。到目前为止它工作正常但在测试期间我遇到了 Quickoffice(Android 4.4,KitKat)的问题,因为它返回一个我无法从中获取文件名的 URI。我还尝试与其他应用程序共享,例如 Dropbox,它在那里工作。

我从 Qickoffice 应用程序获得的确切 URI:

content://com.quickoffice.android.quickcommon.FileContentProvider/5cmeDeeatcdv8IFyu-bEr2w1jSHrvPmCzXGb_VvZulMBErE5Tmfd_5P5kckE68LaEYDVSp3q5r19%0A4sOkpYCEM_VqK6Y%3D%0A

这是我首先使用的代码:

public String getRealPathFromURI(Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {MediaStore.Images.Media.DATA}; // = "_data"
ContentResolver cr = getContentResolver();
cursor = cr.query(contentUri, proj, null, null, null); // <--EXCEPTION

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} catch (Exception exception) {
Log.d("clixend", "Exception: " + exception);
Toast.makeText(this, "Exception: " + exception, Toast.LENGTH_LONG).show();
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}

我收到以下错误的地方:

09-23 16:54:17.664  32331-32341/? E/DatabaseUtils﹕ Writing exception to parcel
java.lang.UnsupportedOperationException: Unsupported column: _data
at com.google.android.apps.docs.quickoffice.FileContentProvider.query(FileContentProvider.java:78)
at android.content.ContentProvider.query(ContentProvider.java:857)
at android.content.ContentProvider$Transport.query(ContentProvider.java:200)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)

经过一些研究,我发现 Android 4.4 Kitkat 引入了管理数据不同的 SAF(存储访问框架),所以我尝试了以下来自 https://developer.android.com/guide/topics/providers/document-provider.html 的代码获取名称:

public String getNameKitkat(Uri contentUri) {
Cursor cursor = getContentResolver()
.query(contentUri, null, null, null, null, null); // <--EXCEPTION
try {
if (cursor != null && cursor.moveToFirst()) {
String displayName = cursor.getString(
cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));

return displayName;
}
} finally {
cursor.close();
}
return null;
}

但我也收到错误代码:

09-23 16:49:43.317  32331-32421/? E/DatabaseUtils﹕ Writing exception to parcel
java.lang.IllegalArgumentException: columnNames.length = 4, columnValues.size() = 2
at android.database.MatrixCursor.addRow(MatrixCursor.java:157)
at android.database.MatrixCursor.addRow(MatrixCursor.java:128)
at com.google.android.apps.docs.quickoffice.FileContentProvider.query(FileContentProvider.java:95)
at android.content.ContentProvider.query(ContentProvider.java:857)
at android.content.ContentProvider$Transport.query(ContentProvider.java:200)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)

如果有人知道如何从我从 Quickoffice 获得的 URI 中获取名称,我将非常感激。

最佳答案

在我进一步搜索之后,我找到了如何从我从 Quickoffice 获得的 URI 中获取文件名的问题的答案。

public String getNameFromURI(Uri contenturi){

String[] proj = {
OpenableColumns.DISPLAY_NAME,
OpenableColumns.SIZE
};
String name = null;
int size= 0;
Cursor metadataCursor = getContentResolver().query(contenturi, proj, null, null, null);

if (metadataCursor != null) {
try {
if (metadataCursor.moveToFirst()) {
name = metadataCursor.getString(0);
size = metadataCursor.getInt(1);
}
} finally {
metadataCursor.close();
}
}

return name;
}

问题是我没有使用正确的 Typ,我想接收。使用后:

String[] proj = {
OpenableColumns.DISPLAY_NAME,
OpenableColumns.SIZE
};

它工作得很好。很抱歉浪费您的时间。

关于java - 从 SAF 内容 URI 中提取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25998735/

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