2016-07-11 15 views
1

Ich benutze Vimeo mit Webview in einer meiner Apps, aber in einigen Geräten funktioniert es nicht sehr gut. Auf meinem Xaiomi (API-19) zeigt es nicht die Video-Fortschrittsleiste und auf meinem S4 (API-21) das erste Mal, wenn ich das Video richtig angezeigt, aber beim zweiten Mal zeigt es einen weißen Bildschirm, nicht nur auf das video schau ich mir aber nur in allen anderen vimeos videos an, die ich versuche zu spielen. Jemand weiß, was ich falsch mache? oder ein anderer Weg, der funktioniert ?. Hier ist meine VimeoPlayer Aktivität.Vimeo Embed zeigt weißen Bildschirm/fehlende Fortschrittsbalken

public class VimeoPlayer extends Activity { 
private HTML5WebView mWebView; 

private ModelVideo video; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mWebView = new HTML5WebView(this); 

     video = getIntent().getParcelableExtra("video"); 

     //Auto playing vimeo videos in Android webview 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.getSettings().setAllowFileAccess(true); 
     mWebView.getSettings().setAppCacheEnabled(true); 
     mWebView.getSettings().setDomStorageEnabled(true); 
     mWebView.getSettings().setPluginState(PluginState.OFF); 
     mWebView.getSettings().setAllowFileAccess(true); 

     String html = "<iframe src=\"https://player.vimeo.com/video/" + video.getVideoUrl() + 
       "?title=0&byline=0&portrait=0&color=000000\" width=\"" + mWebView.getWidth() + "\" height=\"" + 
       mWebView.getHeight() + "\" frameborder=\"0\" webkitallowfullscreen=\"\" mozallowfullscreen=\"\" allowfullscreen=\"\"" + 
       "style=\"margin-top:-8px;margin-bottom:-8px;margin-left:-8px;margin-right:-8px;padding:0;width:105%;height:100%;background-color:#000000;\"></iframe>"; 
     String mime = "text/html"; 
     String encoding = "utf-8"; 
     mWebView.loadDataWithBaseURL(null, html, mime, encoding, null); 

     setContentView(mWebView.getLayout()); 

     //Esconder a Status Bar 
     View decorView = getWindow().getDecorView(); 
     // Hide the status bar. 
     int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; 
     decorView.setSystemUiVisibility(uiOptions); 
     // Remember that you should never show the action bar if the 
     // status bar is hidden, so hide that too if necessary. 
     ActionBar actionBar = getActionBar(); 
     if(actionBar!=null) { 
      actionBar.hide(); 
     } 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mWebView.destroy(); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     mWebView.destroy(); 
     finish(); 
    } 

    } 

Antwort

1

Ich möchte Ihnen einen leichten alternativen Ansatz anbieten. Sie haben einen hardcoded html iframe in Ihrem Code oben, mit dynamischen Schnipsel. Vimeo stellt diesen html iframe für Sie mit ihrem Netzwerk API zur Verfügung, es ist in jedem Video-Objekt enthalten. Ein example ist in der ReadMe enthalten, wie Sie die Anfrage für das Video machen, und dann in einem WebView abspielen. Vollständige Offenlegung, ich bin einer der Autoren dieser Bibliothek.

+0

Hallo @Kevin Z, danke für Ihre Antwort. Ich habe zu der von Ihnen vorgeschlagenen Bibliothek gewechselt, und das Problem mit dem weißen Bildschirm ist behoben, aber auf einigen Geräten wird der Fortschrittsbalken immer noch nicht angezeigt. Wie meine Xiaomi (API-19). Weißt du, was passieren könnte? –

+0

Leider bin ich mir nicht sicher, warum der Fortschrittsbalken auf diesem Gerät nicht angezeigt wird. Wenn es in anderen angezeigt wird, ist möglicherweise eine WebView-Konfiguration nicht ordnungsgemäß festgelegt worden. –