3

IntentsAndroid4.1まで発生しなかったビデオで奇妙なエラーが発生しています。

これがを起動するための私のコードですIntentビデオ/mp4を含む他のMIMEタイプでも試しましたが、インテントとインテントフィルターに関する公式のAndroid開発者サイトによると、ワイルドカード(* video / **)は問題なく機能するはずです。

Intent videoIntent = new Intent();
videoIntent.setAction(Intent.ACTION_VIEW);
videoIntent.setData(Uri.parse(fileUrl));
videoIntent.setType("video/*");

startActivity(videoIntent);

両方ともAndroid4.1を実行している私のデバイスでActivityNotFoundExceptionは、インストールされているアプリケーションがを処理できないと表示されるため、これは結果になりIntentます。これは、以前のすべてのバージョンのAndroidで機能しており、デフォルトのビデオプレーヤーで起動するはずなので奇妙です。

多くのサードパーティのビデオプレーヤーはを処理できるIntentので、なぜデフォルトのビデオプレーヤーで動作しなくなったのか疑問に思います。

何か案は?

これは同じ問題のようです:

Jelly Beanデバイスで動作しないビデオプレーヤー:android.content.ActivityNotFoundException

4

1 に答える 1

4

私は他の誰かの助けを借りて解決策を見つけることができました。通話は、setType()通話を含め、以前に添付されたデータをすべてクリアするsetData()ようです。ドキュメントによると:

このメソッドは、以前に設定されたすべてのデータを自動的にクリアします(たとえば、setData(Uri)によって)。

setDataAndType()代わりに変更すると、機能しました。結局のところ、それはJelly Beanの問題ではなかったようです、ありがたいことに:-)

ビデオインテントを作成するための最終的なコードは次のとおりです。

public static Intent getVideoIntent(String fileUrl) {
    Intent videoIntent = new Intent(Intent.ACTION_VIEW);
    videoIntent.setDataAndType(Uri.fromFile(new File(fileUrl)), getMimeType(fileUrl));

    return videoIntent;
}

public static String getMimeType(String url) {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);

    if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);

        if (TextUtils.isEmpty(type))
            type = "video/*"; // No MIME type found, so use the video wildcard
    }

    return type;
}
于 2012-11-12T18:01:36.760 に答える