2012-01-17 27 views
3

私たちはAndroid用Appstoreにアマゾンに提出した複数のアプリがAndroidマーケットにあります。 Kindle Fireが出てくるまでうまくいきました。いくつかのアプリケーションでは、WebViewのリンクからYoutubeビデオを起動します。ここでビューをプッシュし、YouTubeのリンク扱うsetOnClickListenerから関連するコードです:WebViewのKindle FireとYoutubeリンク

mWebView.setWebViewClient (new WebViewClient() { 
    @ Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("vnd.youtube")){ 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } else{ 
      return false; 
     } 
    } 
}); 

私が言ったように、これは我々が上でテストしたすべてのAndroidデバイス上で素晴らしい作品が、私たちは、アマゾンから通知取得されますビデオリンクをクリックするとクラッシュしてしまいます。 FireがYouTubeアプリを搭載していないため、これが起こっていると思います。他の誰かが同様の問題を経験しましたか? FireのWebviewからyoutubeビデオを再生するための推奨される方法は何でしょうか?ここで

は、Amazonが提供さlogcatです:

01-09 12:28:32.715 W/dalvikvm(5805): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
01-09 12:28:32.715 D/ActivityManager(1372): Starting: Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX } from pid 5805 
01-09 12:28:32.793 E/AndroidRuntime(5805): FATAL EXCEPTION: main 
01-09 12:28:32.793 E/AndroidRuntime(5805): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX } 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.app.Activity.startActivityFromChild(Activity.java:3103) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.app.Activity.startActivityForResult(Activity.java:2883) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.app.Activity.startActivity(Activity.java:2969) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at com.XXXXXXXXXX.XXXXXXXXXX.VideoActivity$1$1.shouldOverrideUrlLoading(VideoActivity.java) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:216) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:323) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.os.Looper.loop(Looper.java:130) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at android.app.ActivityThread.main(ActivityThread.java:3683) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at java.lang.reflect.Method.invokeNative(Native Method) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at java.lang.reflect.Method.invoke(Method.java:507) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:850) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
01-09 12:28:32.793 E/AndroidRuntime(5805): at dalvik.system.NativeStart.main(Native Method) 

編集

私が正しく、この作業を取得することができました。基本的には、ビデオフォルダ(ビデオページのすべてのHTMLを含む)をアセットにコピーして、新しいvideo_fireディレクトリにコピーしました。 android.os.Build.MODELが "Kindle Fire"の場合は、実際のコードをvideo_fireディレクトリを指すように更新し、他のすべての場合は通常のビデオディレクトリを参照しました。また、VideoActivityではなくgetParent()を使用するようにWebViewの割り当てを変更しました。これにより、フルスクリーン表示に関するコメントで説明した問題が修正されました。

public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
    String contentsOfHtml; 
    try { 
     if (android.os.Build.MODEL.equals("Kindle Fire")) { 
      contentsOfHtml = readFileAsString("video_fire/"+htmlarray[position]); 
     } else { 
      contentsOfHtml = readFileAsString("video/"+htmlarray[position]); 
     } 
    } catch (IOException e) { 
     // Should never happen! 
     throw new RuntimeException(e); 
    } 
    WebView mWebView = new WebView(getParent()); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setPluginsEnabled(true); 
    webSettings.setJavaScriptEnabled(true); 
    mWebView.setWebViewClient (new WebViewClient() { 
     @ Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("vnd.youtube")){ 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } else{ 
      return false; 
     } 
     } 
    }); 
mWebView.loadDataWithBaseURL("file:///android_asset/", contentsOfHtml, "text/html", "utf-8", ""); 
ReflectionGroup.group.replaceView(mWebView); 
return; 
}); 

はい、私が使用しているActivityGroup減価償却される(これは古いコードである):以下は、(リストビュー内の項目をクリックすると、それは適切なHTMLページを表示する)私が使用し、更新されたコードです。 Kindleの火災のため

<html> 
<head> 
    <link href="style.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 
    <p class="title">Title</p> 
    <hr/> 
    <a href="vnd.youtube://XXXXX"><div><center><img src="images/video1.jpg" width="220" height="150"></center></div></a> 
    </center> 
    <p class="para">Text</p> 
    <hr/>  
</body> 
</html> 

と特定のHTML:私は、通常のデバイスのためのHTMLを持って

...これはフラグメントを実装するために使用する基本コードの更新に取り組んでいます。私は、このコードが他のデバイスでも動作するかどうかを確認する必要がありますが、それは私のto-doリストに置かなければなりません。特定の例外タイプと、この例外をキャッチして、あなたのURLを製作中で、ブラウザを起動するコードを記述する

<html> 
<head> 
    <link href="style.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 
    <p class="title">Title</p> 
    <hr/> 
<iframe class="youtube-player" type="text/html" width="600" height="361" src="http://www.youtube.com/embed/XXXXXXXX" frameborder="0"> 
</iframe> 
    </center> 
    <p class="para">Text </p> 
    <hr/>  
</body> 
</html> 
+0

解決策は見つかりましたか? – akkilis

+0

今日は火の火を買ったばかりで、私はそれを試しています。 01-23 21:58:27.093:E/AndroidRuntime(2485)この動画は、標準のiFrameを使用して再生する動画を持っていますが、動画を再生するときにフレーム内の全画面ボタンをクリックすると、 :android.view.WindowManager $ BadTokenException:ウィンドウを追加できません - トークン[email protected]は無効です。あなたの活動は実行されていますか? – WookieLNX

+0

私の答えeditted。また、この新しい問題を追加して質問を更新して、リスト内の挑戦を見て、 – akkilis

答えて

1

てみてください(「HTTP」でそれを開始し、そうでなければ文句を言わないWebブラウザで開いています)。

....
catch(ActivityNotFoundException e){
url = YOUR_URL_STARTING_WITH_HTTP;
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}



Editted章:
は今、さまざまな問題をthatsのビューが呼び出されるか、活動が終了した後に変更/表示するようにしようとした場合、一般的に来ます。 onPostExecuted()で何かをしていますか?これは、そのタスクを作成したアクティビティが終了した後に発生している可能性があります。

+0

そのことをやっている点は何ですか?彼はまったく同じことをやっているのですか? – JoxTraex

1

youtubeリンクを処理できるものがない場合は、それでは、すでに問題があります。

このエラーは明確に述べている:システムには何も意味しない

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX } 

はそれを扱うことができ、私は私がKindleの火災のプラットフォームに精通していないよ、もう一度あなたは何も悪いことをしたと思うが、いけません。しかしながら; PackageManagerをある程度活用すれば、それを把握することができます。

+0

Kindle FireはYouTube Appに付属していませんが、ほとんどのAndroid搭載デバイスはデフォルトでインストールされています。実際、Amazon Appstoreには公式のYouTubeアプリはありません。私はAmazonとGoogleの間にいくつかの悪い血があると思っています... – WookieLNX

+0

これは事実であれば、ブラウザに依存してYouTubeリンクをレンダリングしなければならない可能性がありますWebviewを実行中に変更する場合を除きます。 – JoxTraex

+0

上記の私の解決策を見ることができます。これまでのところ、私はビデオをwebviewに埋め込んでいるのでうまく動作します。 – WookieLNX

関連する問題