Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Intent.ACTION\查看不处理冰激凌的视频URL_Android_Android Intent_Android 4.0 Ice Cream Sandwich - Fatal编程技术网

Android Intent.ACTION\查看不处理冰激凌的视频URL

Android Intent.ACTION\查看不处理冰激凌的视频URL,android,android-intent,android-4.0-ice-cream-sandwich,Android,Android Intent,Android 4.0 Ice Cream Sandwich,我有以下代码来查看远程托管的视频文件: startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(article.getLink()))); 其中getLink()返回与文章关联的视频的URL 这种方法在姜饼(Gingerbread)之前的设备上运行良好,但我最近一直在IC上测试该应用程序,发现了一个问题。ICS浏览器开始加载URL,我在导航栏中看到它,但随后浏览器几乎立即关闭,我被带回应用程序的活动 发生这种情况时,我会得到以下堆栈跟踪: 1

我有以下代码来查看远程托管的视频文件:

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(article.getLink())));
其中
getLink()
返回与文章关联的视频的URL

这种方法在姜饼(Gingerbread)之前的设备上运行良好,但我最近一直在IC上测试该应用程序,发现了一个问题。ICS浏览器开始加载URL,我在导航栏中看到它,但随后浏览器几乎立即关闭,我被带回应用程序的活动

发生这种情况时,我会得到以下堆栈跟踪:

11-28 10:24:44.488: E/SurfaceTexture(116): [com.mypackage.myapp/com.mypackage.myapp.MyVideoActivity] connect: already connected (cur=2, req=2)
11-28 10:24:44.488: E/ViewRootImpl(25384): IllegalArgumentException locking surface
11-28 10:24:44.488: E/ViewRootImpl(25384): java.lang.IllegalArgumentException
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.view.Surface.lockCanvasNative(Native Method)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.view.Surface.lockCanvas(Surface.java:76)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:1924)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1613)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.os.Looper.loop(Looper.java:137)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at android.app.ActivityThread.main(ActivityThread.java:4340)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at java.lang.reflect.Method.invokeNative(Native Method)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at java.lang.reflect.Method.invoke(Method.java:511)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-28 10:24:44.488: E/ViewRootImpl(25384):  at dalvik.system.NativeStart.main(Native Method)

有没有其他人看到过这种行为/知道修复方法?

没有看到,但解决方法可能是显式调用youtube应用程序(如果已安装),而不是让浏览器处理它

/**
 * @param context
 * @param url To display, such as http://www.youtube.com/watch?v=t_c6K1AnxAU
 * @return an Intent to start the YouTube Viewer. If it is not found, will
 *         return a generic video-play intent, and system will display a
 *         chooser to ther user.
 */
public static Intent getYouTubeIntent(Context context, String url) {
  Intent videoIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  final PackageManager pm = context.getPackageManager();
  List<ResolveInfo> activityList = pm.queryIntentActivities(videoIntent, 0);
  for (int i = 0; i < activityList.size(); i++) {
    ResolveInfo app = activityList.get(i);
    if (app.activityInfo.name.contains("youtube")) {
      videoIntent.setClassName(app.activityInfo.packageName, app.activityInfo.name);
      return videoIntent;
    }
  }
  return videoIntent;
}
/**
*@param上下文
*@param要显示的url,例如http://www.youtube.com/watch?v=t_c6K1AnxAU
*@返回启动YouTube查看器的意图。如果找不到,威尔
*返回一般视频播放意图,系统将显示
*选择其他用户。
*/
公共静态意图GetYouTube内容(上下文、字符串url){
Intent videoIntent=newintent(Intent.ACTION_视图,Uri.parse(url));
final-PackageManager pm=context.getPackageManager();
列表活动列表=pm.querytentActivities(videoIntent,0);
对于(int i=0;i

来自@Guy->

的代码我尝试了一些方法,发现在intent work中显式地设置了数据的数据类型

Intent videoIntent =new Intent(Intent.ACTION_VIEW);
videoIntent.setDataAndType(Uri.parse(article.getLink()), "video/*");
startActivity(videoIntent);

注意:我在姜饼2.3.6中也遇到了类似的错误

这在运行ICS的三星Galaxy Tab 2上不起作用:(