1

在我的应用程序中,我可以下载一个文档(例如 docx)并在 QuickOffice 中打开它。编辑文档后,我使用保存按钮并成功保存后,我点击共享按钮并选择我的应用程序,以便重新上传它。

我的问题是,我得到的 uri 不是您期望的通常的 uri,如 content://storage/map/file.docx 或类似的东西。我从 quickoffice 得到这个:

content://com.quickoffice.android.quickcommon.FileContentProvider/zEV5qmvBJOg2GGWldHMJnNK687Ur6qLGbbMbxj0IxV9cDv2mN8XTGqRrEqU4KIfeZuQNMKMJ_eDx%0AN4YiNZwDShhb4E8%3D%0A

我的问题是,如何将此 uri 转换为文件中的真实路径 uri(例如 content://storage/map/file.docx)

4

2 回答 2

1

没有“真正的道路”。

欢迎AContentProvider将其内容存储在任何它想要的地方,这可能不是文件(例如,数据库中的 BLOB 列),即使是,它也可能不是您可以访问的文件(例如,内部存储托管ContentProvider.

请使用 上的各种方法ContentResolver,例如openInputStream(),访问此提供程序的内容。

于 2014-03-27T11:59:24.213 回答
0

请使用以下代码。它对我来说很好。

公共静态字符串 getContentName(ContentResolver 解析器,Uri uri){

String[] ATTACHMENT_META_COLUMNS = {
         OpenableColumns.DISPLAY_NAME,
        OpenableColumns.SIZE
    };
String name = "";
int size= 0;
Cursor metadataCursor = resolver.query(uri,  ATTACHMENT_META_COLUMNS, null, null, null);

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

return name;

}

于 2014-04-13T15:23:30.517 回答