Android意图播放video?

我试图通过启动一个意图在Android上播放video。 我使用的代码是:

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

这适用于大多数手机,但不适用于HTC Hero 。 这似乎加载了一点不同的video播放器。 这确实播放了第一个video。 但是,之后的每个video都不会回应。 (它保持在一些循环)。

如果我添加一个明确的

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

(在启动之前)它在HTC Hero上工作。 但是,由于这是一个HTC特定的呼叫,我不能在其他手机(如G1 )上运行此代码。 在G1上 ,这个工作:

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

但是英雄却没有这个意图。 有没有人知道所有Android设备应该支持的意图/类名的列表? 或者一个特定的一个发布video? 谢谢!

在Intent上使用setDataAndType

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

如果您不知道types,请使用“video / mp4”作为MIME或使用“video / *”。

我已经遇到了这个与英雄,使用我认为是一个公布的API。 最后,我用一个testing来看是否可以收到意图:

 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–你必须绝对提供一个你肯定会工作的后备。 它不一定是完美的,它可以是一个吐司说,这是不支持这个手机/设备,但你应该避免未捕获的exception。 结束明显。


我发现intents协议的Open Intents Registry非常有用,但是我还没有find相当于TCKtypes的绝对必须支持的意图列表,以及哪些应用程序可以做不同的手机。

下面的代码对我来说很好。

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(movieurl)); startActivity(intent); 

从debugging信息看来, MainActivity中的VideoIntent无法将video的path发送到VideoActivity 。 它从uriString提供了一个NullPointerException错误。 我认为VideoActivity一些代码:

 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); }