web-dev-qa-db-ja.com

Androidの複数のMIMEタイプ

intent.setType()を使用し、複数の幅広いタイプ(画像andビデオなど)を提供する方法はありますか?

ACTION_GET_CONTENTを使用しています。カンマ区切りの型だけで動作しているようです。

66
James

Android 4.4 Storage Access Framework を使用する場合) EXTRA_MIME_TYPES は、複数のMIMEタイプを渡します。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"image/*", "video/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent, REQUEST_CODE_OPEN);
94
Fred

実際、複数のMIMEタイプがサポートされています。あなたも試してみましたか???

例:intent.setType("image/*,video/*")は写真とビデオを表示します...

私にとってはうまくいきます。それもあなたのために働くはずです...

[編集]:これは部分的に機能します。すべてのギャラリーアプリが複数のMIMEタイプフィルターのサポートの実装を選択するわけではないためです。

20
vchelbanster

私にとって最もうまくいったのは:

intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);


このようないくつかのMIMEタイプを追加できます

intent.setType("image/*|application/pdf|audio/*");

ただし、インテントチューザーは、MIMEタイプ文字列の最初の画像であるため、画像を処理できるアプリケーションのみを表示します。

ただし、ファイルマネージャーがインストールされている場合(CyanogenModファイルマネージャーでテストしました)、音声、pdf、または画像のファイルを選択できます。

次のように、オーディオMIMEタイプが最初のものである場合:

intent.setType("audio/*|image/*|application/pdf");

インテントチューザーには、オーディオを処理するアプリケーションのみが表示されます。
ファイルマネージャーを使用して、画像、PDF、または音声を選択できます。

4
Raimundo

申し訳ありませんが、これは現在サポートされていません。次の2つのオプションがあります。

(1)_*/*_のMIMEタイプを使用し、ユーザーが処理できないもの(およびそのための適切な回復パスを持つもの)を選択できることを受け入れます。または

(2)独自のアクティビティセレクターを実装し、パッケージマネージャーで直接呼び出しを行って、インテントの両方のMIMEタイプを処理できるアクティビティを取得し、それらのリストをマージして、ユーザーに表示します。

また、setType()はコンマ区切りのタイプではまったく機能しません。 MIMEタイプは1つだけでなければなりません。

3
hackbod

|で区切ると、複数のMIMEタイプを渡すことができます

Intent.setType("application/*|text/*");
2
Cifus