0

さて、カスタムフォルダーを持つアプリがあります:

次のタイプを開きたい:

protected String[] acceptableTypes = {"jpg", "gif", "png", "bmp", "pdf", "txt"};

ファイルをクリックするたびに、次のコードを使用して、画像または少なくとも jgps を確実に開くことができます。

MediaScannerConnection.scanFile(((Activity) getContext()), new String[] { filePath }, null, 
                new MediaScannerConnection.OnScanCompletedListener() { 
            @Override public void onScanCompleted(String path, Uri uri) { 
                Intent intent = new Intent(Intent.ACTION_VIEW); 
                intent.setDataAndType(uri, "image/*"); 
                ((Activity) getContext()).startActivityForResult(intent, ConferenceActivity.ACTIVITY_SELECT_IMAGE); 
            } 
        });

正しいプログラムで正しいファイル タイプを開くことができるように、これをフィルタリングするにはどうすればよいでしょうか。

4

2 に答える 2

0

setDataAndTypeで正しいmimeTypeを渡す必要があります。URLConnection.guessContentTypeFromNameを使用して、ファイルのmimeTypeを取得できます。

だからこのようなもの:

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
String mimeType = URLConnection.guessContentTypeFromName(filePath);
i.setDataAndType(Uri.fromFile(new File(filePath)), mimeType);
startActivity(i);
于 2013-01-30T18:51:25.277 に答える
0

これを行う方法の概要については、 http://developer.android.com/guide/components/intents-filters.htmlを参照してください。そのページの「image/」から検索してください。

アプリケーションのマニフェスト ファイルでファイル タイプを宣言する必要があります。gmail などの他のアプリケーションからファイルを開くことができるように、「image/*」や「image/png」などの mimeType を使用して宣言してください。

アクティビティでは、次のようなものを追加します。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <data android:mimeType="image/*" />
</intent-filter>

もう 1 つの問題は、「ファイル」スキームと「コンテンツ」スキームの両方を処理する必要があることです。私が言いたいことを理解するには、Jellybean で Gmail からファイルを開くと、提供された URI が通常のファイル タイプではなくコンテンツ タイプであることがわかります。

于 2013-01-27T21:16:33.767 に答える