64

インテントを起動して、Android でビデオを再生しようとしています。私が使用しているコードは次のとおりです。

tostart = new Intent(Intent.ACTION_VIEW);
tostart.setDataAndType(Uri.parse(movieurl), "video/*");
startActivity(tostart); 

これはほとんどの携帯電話で機能しますが、HTC Heroでは機能しません。少し異なるビデオプレーヤーをロードしているようです。これにより、スローされた最初のビデオが再生されます。ただし、その後のすべてのビデオは応答しません。(それはいくつかのループにとどまります)。

明示的に追加すると

tostart.setClassName("com.htc.album","com.htc.album.ViewVideo");

(startactivity の前に) HTC Heroで動作します。ただし、これはHTC固有の呼び出しであるため、このコードを他の電話 ( G1など) で実行することはできません。G1では、これは機能します。

tostart.setClassName("com.android.camera","com.android.camera.MovieView"); //g1 version

しかし、主人公にはその意図が欠けています。すべての Android デバイスでサポートされるべきインテント/クラス名のリストを知っている人はいますか? または、ビデオを起動するための特定のものですか?ありがとう!

4

6 に答える 6

93

インテントで setDataAndType を使用する

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newVideoPath));
intent.setDataAndType(Uri.parse(newVideoPath), "video/mp4");
startActivity(intent);

MIME として「video/mp4」を使用するか、タイプがわからない場合は「video/*」を使用します。

編集:これは一般的な使用には無効です。インテント コンストラクターと後で設定する両方で URI を必要とする古い HTC デバイスのバグを修正します。

于 2013-01-07T10:41:18.413 に答える
11

次のコードは私にとってはうまくいきます。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(movieurl));
startActivity(intent);
于 2011-11-16T00:27:04.990 に答える
11

公開された API だと思っていたものを使用して、ヒーローでこれに遭遇しました。最後に、テストを使用してインテントを受信できるかどうかを確認しました。

private boolean isCallable(Intent intent) {
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 
        PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

通常、アクティビティを開始するときに使用します。

final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
if (isCallable(intent)) {
    // call the intent as you intended.
} else {
    // make alternative arrangements.
}

明らか: 非公開 API を使用してこのルートをたどる場合は、確実に機能することがわかっているフォールバックを絶対に提供する必要があります。完璧である必要はありません。これは、このハンドセット/デバイスではサポートされていないことを示すトーストである可能性がありますが、キャッチされない例外を避ける必要があります。明らかな終わり。


Open Intents Registry of Intents Protocolsは非常に便利だと思いますが、絶対にサポートする必要があるインテントの TCK タイプ リストに相当するものや、さまざまなハンドセットを実行するアプリの例は見つかりませんでした。

于 2009-10-23T16:22:56.393 に答える
0

デバッグ情報から、MainActivityからのVideoIntentがビデオのパスをVideoActivityに送信できないようです。からエラーが発生します。私はからのそのコードのいくつかを考えます:NullPointerExceptionuriStringVideoActivity

Intent myIntent = getIntent();
String uri = myIntent.getStringExtra("uri");
Bundle b = myIntent.getExtras();

startVideo(b.getString(uri));

ここから uri を受信できません:

public void playsquirrelmp4(View v) {
    Intent VideoIntent = (new Intent(this, VideoActivity.class));
    VideoIntent.putExtra("android.resource://" + getPackageName()
        + "/"+   R.raw.squirrel, uri);
    startActivity(VideoIntent);
}
于 2013-04-15T16:40:08.090 に答える