Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Intent.ACTION_VIEW a video URL not working on Ice Cream Sandwhich

I have the following code to view a remotely hosted video file:

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(article.getLink())));

where getLink() returns the URL of the video associated with the article.

This approach has worked fine on devices up to Gingerbread, but I have recently been testing the app on ICS and have found a problem. The ICS browser begins loading the URL and I see it in the nav bar, but then almost immediately the browser closes and I'm taken back to my app's activity.

I'm getting the following stack trace when it happens:

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)

Has anyone else seen this behaviour / know of a fix?

like image 320
Matt Colliss Avatar asked Nov 28 '11 10:11

Matt Colliss


1 Answers

I tried a few things and found explicitly setting the data type of the data within the intent work.

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

Note: I also experienced a similar error in Gingerbread 2.3.6.

like image 78
scottyab Avatar answered Nov 07 '22 20:11

scottyab