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