Android视频意图问题
上周我发布了一个应用程序,这个应用程序只包含视频链接,允许用户在点击任何按钮链接时观看视频片段 我正在使用此代码播放视频:Android视频意图问题,android,video,android-intent,Android,Video,Android Intent,上周我发布了一个应用程序,这个应用程序只包含视频链接,允许用户在点击任何按钮链接时观看视频片段 我正在使用此代码播放视频: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("http://www.yourvideo.mp4"), "video/mp4"); view.getContext().startActivity(intent); 然而,在某些情况下,这段代码在一些设备上
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("http://www.yourvideo.mp4"), "video/mp4");
view.getContext().startActivity(intent);
然而,在某些情况下,这段代码在一些设备上不起作用,我的应用程序的一些用户说,只要他们按下任何链接,它就会强制关闭整个应用程序。我在我的Droid X上试过,效果非常好
我做错什么了吗?请帮帮我,我会非常感激的
这是我得到的错误
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW
dat=http://www.yourvideos.mp4 typ=video/mp4 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
at android.app.Activity.startActivityForResult(Activity.java:2817)
at android.app.Activity.startActivity(Activity.java:2923)
at com.MyApplication.desc182$1.onClick(desc182.java:34)
at android.view.View.performClick(View.java:2408)
at android.view.View$PerformClick.run(View.java:8816)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
at dalvik.system.NativeStart.main(Native Method)
我也有同样的问题,但从来没有找到一个好的理由来解释为什么会发生这种情况。我最终只是捕获了ActivityNotFoundException并显示了一个对话框 以下是一种方法,您可以判断是否存在可以处理特定意图的活动:
private boolean checkCanOpenVideoMP4Url(String videoUrl) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
List<ResolveInfo> resolveInfo = getPackageManager().queryIntentActivities(intent, 0);
return (resolveInfo.size() > 0);
}
私有布尔检查CANopenVideoMP4URL(字符串videoUrl){
意向意向=新意向(意向.行动\视图);
intent.setDataAndType(Uri.parse(url),“video/mp4”);
List resolveInfo=getPackageManager().QueryInputActivities(intent,0);
返回(resolveInfo.size()>0);
}
您可以使用此方法查看意图是否可以处理,然后如果没有可以处理特定意图的活动,则适当地向用户发送消息。我遇到了完全相同的问题,但从未找到发生这种情况的原因。我最终只是捕获了ActivityNotFoundException并显示了一个对话框 以下是一种方法,您可以判断是否存在可以处理特定意图的活动:
private boolean checkCanOpenVideoMP4Url(String videoUrl) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
List<ResolveInfo> resolveInfo = getPackageManager().queryIntentActivities(intent, 0);
return (resolveInfo.size() > 0);
}
私有布尔检查CANopenVideoMP4URL(字符串videoUrl){
意向意向=新意向(意向.行动\视图);
intent.setDataAndType(Uri.parse(url),“video/mp4”);
List resolveInfo=getPackageManager().QueryInputActivities(intent,0);
返回(resolveInfo.size()>0);
}
您可以使用此方法查看意图是否可以处理,然后如果没有可以处理特定意图的活动,则适当地向用户发送消息。我认为问题在于您设置了“操作”视图。但可能存在这样的情况,即设备并没有为该操作定义意图过滤器的任何应用程序 简单地说,该设备可能没有任何媒体播放器,您可以在其中预览视频
谢谢。我想问题在于你设置了行动视图。但可能存在这样的情况,即设备并没有为该操作定义意图过滤器的任何应用程序 简单地说,该设备可能没有任何媒体播放器,您可以在其中预览视频
谢谢。我注意到选择的响应不是很尖锐,但响应几乎就在那里 在我的应用程序中,用户可以看到电影预告片,在我们这边,我们可以看到预告片,但当应用程序发布时,我们收到一些投诉,说预告片什么都不做。 Android有一个默认的媒体播放器,功能不多,因此用户必须有另一个媒体播放器(如MX Replicator)才能观看一些视频。因此,您不仅需要捕获异常(就像您已经做的那样),还需要建议用户下载一个合适的复制器 另一个关键点是用于复制的协议。大多数媒体播放器无法使用https协议进行解析。所以,如果您试图使用它进行复制,您可能需要在http协议中公开,或者找到另一种解决方法 最后,默认的复制器可以防止落入catch块,因为失败的不是您的应用程序。在这种情况下,默认的复制器将告诉用户视频无法复制 以下是您可以使用的代码:
try {
view.getContext().startActivity(intent);
}
catch (ActivityNotFoundException ex) {
// Tell the user that must download a proper reproductor. Even suggest one that works.
}
嗯,,
弥尔顿我注意到所选择的反应并不十分尖锐,但反应几乎就在那里 在我的应用程序中,用户可以看到电影预告片,在我们这边,我们可以看到预告片,但当应用程序发布时,我们收到一些投诉,说预告片什么都不做。 Android有一个默认的媒体播放器,功能不多,因此用户必须有另一个媒体播放器(如MX Replicator)才能观看一些视频。因此,您不仅需要捕获异常(就像您已经做的那样),还需要建议用户下载一个合适的复制器 另一个关键点是用于复制的协议。大多数媒体播放器无法使用https协议进行解析。所以,如果您试图使用它进行复制,您可能需要在http协议中公开,或者找到另一种解决方法 最后,默认的复制器可以防止落入catch块,因为失败的不是您的应用程序。在这种情况下,默认的复制器将告诉用户视频无法复制 以下是您可以使用的代码:
try {
view.getContext().startActivity(intent);
}
catch (ActivityNotFoundException ex) {
// Tell the user that must download a proper reproductor. Even suggest one that works.
}
嗯,,
弥尔顿你所说的行动观是什么意思?你的意思是我必须用别的东西替换它,或者取而代之地移除它?为什么要移除它。这绝对正确。但如果您的设备上可能没有安装任何视频预览器。你怎么能看视频呢?我的处境很相似:1)SD卡上有.mp4文件。2) 如果我使用文件管理器浏览文件,我就可以使用视频播放器播放电影。(所以我有一个,文件管理器让我用标准对话框选择合适的播放器)3)不幸的是,这不适用于应用程序。我从来没有被问到应该使用哪个视频播放器。(我的Soution,与上面一样适用于三星Galaxy Se,但不适用于LG Nexus 5)你所说的action_View是什么意思?你的意思是我必须用别的东西替换它,或者取而代之地移除它?为什么要移除它。这绝对正确。但如果您的设备上可能没有安装任何视频预览器。你怎么能看视频呢?我的处境很相似:1)SD卡上有.mp4文件。2) 如果我使用文件管理器浏览文件,我就可以使用视频播放器播放电影。(所以我有了一个,文件管理器让我用标准对话框选择合适的播放器)3)不幸的是