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)不幸的是