2016-07-11 3 views
1

Я использую Vimeo с webview в одном из своих приложений, но на некоторых устройствах он работает не очень хорошо. На моем xaiomi (API-19) он не показывает панель прогресса видео и на моем S4 (API-21) в первый раз, когда я смотрю видео, которое он отображает правильно, но во второй раз он показывает белый экран, а не только на видео я просто смотрю, но во всех других видео Vimeos, которые я пытаюсь играть. Кто-то знает, что я делаю неправильно? или другой способ, который работает ?. Вот моя деятельность VimeoPlayer.Vimeo embed show white screen/missing progressbar

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(); 
    } 

    } 

ответ

1

Я хотел бы предложить небольшой альтернативный подход для вас. У вас есть hardcoded html iframe в вашем коде выше, с динамическими фрагментами. Vimeo предоставляет этот html iframe для вас с их сетью API, он включен в каждый объект Video. В ReadMe включен код example о том, как сделать запрос для видео, а затем воспроизвести его в WebView. Полное раскрытие, я являюсь одним из авторов этой библиотеки.

+0

Здравствуйте @Kevin Z, спасибо за ваш ответ. Я перешел в библиотеку, которую вы предложили, и проблема с белым экраном разрешена, но индикатор выполнения пока не отображается на некоторых устройствах. Как и мой xiaomi (API-19). Вы знаете, что может случиться? –

+0

К сожалению, я не уверен, почему индикатор прогресса не отображается на этом устройстве. Если он отображается на других, это может быть конфигурация WebView, которая не была настроена должным образом. –

Смежные вопросы