2012-01-17 2 views
3

Android 용 Appstore에 Amazon으로 제출 한 여러 가지 앱이 Android 마켓에 있습니다. Kindle Fire가 나올 때까지 일이 잘 돌아갔습니다. 몇 가지 응용 프로그램에서는 WebView의 링크에서 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; 
     } 
    } 
}); 

내가 말했듯이 우리가 테스트 한 모든 안드로이드 장치에서 잘 작동,하지만 우리는 아마존에서 통보 받고 있는지 동영상 링크를 클릭하면 충돌이 발생합니다. Fire가 YouTube 앱으로로드되지 않기 때문에 이러한 상황이 발생했다고 가정합니다. 다른 누구도 비슷한 문제를 경험 했습니까? Fire의 webview에서 YouTube 비디오를 재생할 때 가장 선호되는 방법은 무엇입니까?

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 감가 상각 (이 오래된 코드) : 아래 (ListView가있는 항목을 클릭 할 때 해당 HTML 페이지를 표시) 내가 사용하는 업데이트 된 코드입니다. 킨들 파이어 (Kindle Fire)에 대한

<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을 가지고 ...이 조각을 구현하는 데 사용하는 기본 코드를 업데이트하는 작업을하고 있습니다. 이 코드가 다른 장치에서도 작동하는지 확인해야 겠지만 할 일 목록에 추가해야합니다. 특정 예외 유형이 예외를 잡을 다음 URL을 editting에 의해 브라우저를 실행하는 코드를 작성하는

<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

나는 방금 불을 샀다. 나는 그것을 시험하고있다. 표준 iframe을 사용하여 재생할 동영상이 있지만 동영상을 재생할 때 프레임의 전체 화면 버튼을 클릭하면 강제 종료됩니다. 01-23 21 : 58 : 27.093 : E/AndroidRuntime (2485) : android.view.WindowManager $ BadTokenException : 창을 추가 할 수 없습니다 - 토큰 [email protected] 유효하지 않습니다; 당신의 활동은 실행 중입니까? – WookieLNX

+0

내 답변 editted. 또한이 새로운 문제를 추가하여 질문을 업데이트해야합니다. 목록에 agaion이 표시되고 – akkilis

답변

1

보십시오 ("HTTP"로 시작, 그렇지 않으면 실 거예요 웹 브라우저에서 열 수).
....
catch(ActivityNotFoundException e){
url = YOUR_URL_STARTING_WITH_HTTP;
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}




편집 해 섹션 :
이제 다른 문제를 이잖아 뷰가 호출 또는 표시/활동이 끝난 후에 수정하려고하면 일반적으로 제공됩니다. onPostExecuted()에서 uid와 관련된 작업을 수행하고 있습니까? 이 작업은 해당 작업을 만든 활동이 끝난 후에 발생할 수 있습니다.

+0

그 일의 요점은 무엇입니까? 만약 그가 똑같은 일을 시도한다면? – JoxTraex

1

유튜브 링크를 처리 할 수있는 것이 아무것도 없다면. 그렇다면 이미 문제가 있습니다.

이 오류는 분명히 상태 :

것을 처리 할 수있는 시스템의 아무 의미없는
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX } 

, 당신이 뭔가 잘못했다고 생각 해달라고하지만, 다시 내가 빛나다 화재의 플랫폼에 익숙하지 않다. 하나; PackageManager의 일부 활용으로, 당신은 그것을 알아낼 수 있습니다.

+0

Kindle Fire는 YouTube 앱과 함께 제공되지 않지만 대부분의 Android 기기에는 기본적으로 설치되어 있습니다. 실제로 Amazon Appstore에는 공식 YouTube 앱이 없습니다. 아마존과 구글 사이에 악의적 인 피가 있다고 생각합니다. – WookieLNX

+0

이것이 사실이라면, 브라우저에 의존해야합니다 웹 뷰를 실행중인 것으로 수정하지 않는 한. – JoxTraex

+0

위의 내 솔루션을 볼 수 있습니다. 지금까지는 웹 뷰에 비디오를 포함하기 때문에 잘 작동합니다. – WookieLNX

관련 문제