2011-11-28 67 views
5

視頻網址我有以下代碼來查看遠程託管的視頻文件:Intent.ACTION_VIEW不工作的冰淇淋三明治

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

其中getLink()返回與本文相關的視頻的URL。

這種方法在Gingerbread以上的設備上工作正常,但我最近一直在ICS上測試應用程序,並發現一個問題。 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) 

有其他人看到的修復程序的這種行爲/知道嗎?

回答

5

我嘗試了一些東西,發現明確設置數據的意圖工作中的數據類型。

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

注意:我也遇到過薑餅2.3.6類似的錯誤。

+0

這不適用於運行ICS的Samsung Galaxy Tab 2。 :( –

0

沒有看到這個,但一個解決方法可能是顯式調用youtube應用程序(如果它安裝),而不是讓瀏覽器處理它。從@Guy

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

代碼 - >https://stackoverflow.com/a/6674637/31751

+0

謝謝斯科特我今天會在這裏嘗試一下! –

相關問題