1

私のアプリでは、ドキュメント (docx など) をダウンロードして、QuickOffice で開くことができます。ドキュメントを編集した後、保存ボタンを使用し、正常に保存した後、共有ボタンを押してアプリを選択し、再アップロードできるようにします。

私の問題は、取得した uri が content://storage/map/file.docx またはそのようなものとして期待する通常の uri ではないことです。私はクイックオフィスからこれを取得します:

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

次のコードを使用してください。それは私にとってはうまくいきました。

public static String getContentName(ContentResolver resolver, 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 に答える