0

我知道有很多關於此主題的問題,但他們都沒有幫助我:( 我想調用一個java方法在VideoView中播放視頻上傳遞參數WebView中,但我遇到了以下問題:在WebView中使用VideoView時的RuntimeException - Android

  1. 在activity_main,當我有內部的WebView VideoView標籤,然後我得到一個黑屏,基本上我的HTML是沒有得到加載
  2. 在activity_main時。我不使用VideoView但只有WebView才能顯示我的HTML,但是在使用VideoView vv = new VideoView(this)實例化VideoView時出現Uncaught Error 。
  3. 關於在WebView和VideoView標籤周圍使用相對或線性標籤不讓應用程序啓動。

有人可以幫助我完善我的activty_main.xml以獲得此代碼的工作?請在下面找到我的代碼片段:

我activity_main.xml中:

<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/WebView123"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:layout_weight="1.0" > 
       <!--On removing this VideoView, HTML getting displayed but Video not gettin launched 
        <VideoView android:id="@+id/videoView" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        /> 
        </WebView> 

我MainActivty.java

      public class MainActivity extends Activity { 

     WebView browser; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    browser = (WebView) findViewById(R.id.WebView123); 
    WebSettings webSettings = browser.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setPluginState(WebSettings.PluginState.ON_DEMAND); 
    webSettings.setAllowFileAccessFromFileURLs(true); 
    browser.setWebChromeClient(new WebChromeClient()); 
    browser.setWebViewClient(new WebViewClient(){ 
       @Override 
       public boolean shouldOverrideUrlLoading(browser , String url) { 
       return false; 
       } 
       }); 
       MainActivity jsInterface = new MainActivity(); 
    browser.addJavascriptInterface(jsInterface, "interfaces"); 
    browser.loadUrl("file:///android_asset/index.html"); 
    setContentView(browser); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@JavascriptInterface 
public void videoPlayer(String identifer){ 
    System.out.println("Hey I am in Here"); 
    // 2nd Point - > VideoView videoHolder = new VideoView(this); 
    VideoView videoHolder = (VideoView) findViewById(R.id.videoView); 

    MediaController mc = new MediaController(this); 
    mc.setAnchorView(videoHolder); 
    videoHolder.setMediaController(mc); 
    if(identifer.equals("1")){ 
     String path = "android.resource://" + R.raw.intro; 
     videoHolder.setVideoURI(Uri.parse(path)); 
     } 
     videoHolder.start(); 
     videoHolder.requestFocus(); 
      } 
       } //class end 

我對的WebView HTML:

    <button onClick="window.interfaces.videoPlayer('1');">Button</button> 

回答

0

關於方法#1 ,實際上你不能把VideoView放在WebView之內,因爲後者是純粹使用的d繪製網頁。

關於方法#2,請注意JavascriptInterface不會在Android UI主線程中執行,因爲它是從JS引擎調用的。即如果你有權訪問UI組件(在你的情況下,你通過findViewById()操縱VideoView),那麼你需要將它移動到UI主線程中。因爲在Android中,一些操作,特別是視圖操作,只能在UI主線程中執行。

更具體地說,您可能需要使用runOnUiThread(),或發送意圖在您的MainActivty.java中啓動視頻。

相關問題