2011-11-28 8 views
5

tengo el siguiente código para acceder a un archivo de vídeo alojado de forma remota:Intent.ACTION_VIEW una URL de vídeo que no trabaja en sándwich de helado

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

donde getLink() devuelve la dirección URL del vídeo asociado con el artículo.

Este enfoque ha funcionado bien en dispositivos hasta Gingerbread, pero recientemente he probado la aplicación en ICS y he encontrado un problema. El navegador ICS comienza a cargar la URL y la veo en la barra de navegación, pero casi inmediatamente se cierra el navegador y vuelvo a la actividad de mi aplicación.

estoy recibiendo este seguimiento de pila cuando sucede:

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) 

nadie ha visto este comportamiento/conocimientos de una solución?

Respuesta

5

he intentado un par de cosas y encontró establecer explícitamente el tipo de datos de los datos dentro de la obra intención.

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

Nota: También experimenté un error similar en Gingerbread 2.3.6.

+0

Esto no funciona en el Samsung Galaxy Tab 2 que ejecuta ICS. :( –

0

No se ha visto esto, pero una alternativa sería invocar explícitamente la aplicación de youtube (si está instalada) en lugar de dejar que el navegador la maneje.

/** 
* @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; 
} 

Código de @Guy ->https://stackoverflow.com/a/6674637/31751

+0

Gracias Scott Voy a intentarlo en algún momento hoy! –

Cuestiones relacionadas