2011-11-28 38 views
5

Tôi có đoạn code sau để xem một file video lưu trữ từ xa:Intent.ACTION_VIEW URL video không làm việc trên Ice Cream Sandwhich

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

nơi getLink() trả về URL của video liên quan đến bài viết.

Cách tiếp cận này đã hoạt động tốt trên các thiết bị lên Gingerbread, nhưng gần đây tôi đã thử nghiệm ứng dụng trên ICS và đã phát hiện sự cố. Trình duyệt ICS bắt đầu tải URL và tôi thấy nó trong thanh điều hướng, nhưng sau đó gần như ngay lập tức trình duyệt đóng và tôi được đưa trở lại hoạt động của ứng dụng.

Tôi nhận được vết đống sau khi nó xảy ra:

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) 

Có ai khác nhìn thấy hành vi này/bí quyết của một sửa chữa?

Trả lời

5

Tôi đã thử một vài điều và thấy rõ ràng thiết lập kiểu dữ liệu của dữ liệu trong phạm vi công việc dự định.

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

Lưu ý: Tôi cũng gặp lỗi tương tự trong Gingerbread 2.3.6.

+0

Điều này không hoạt động trên Samsung Galaxy Tab 2 đang chạy ICS. :( –

0

Không thấy điều này nhưng một công việc xung quanh có thể được gọi rõ ràng ứng dụng youtube (nếu nó được cài đặt) thay vì để cho trình duyệt xử lý nó.

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

Mã từ @ Guy ->https://stackoverflow.com/a/6674637/31751

+0

Cảm ơn Scott Tôi sẽ thử tính năng này ngay hôm nay! –

Các vấn đề liên quan