我知道围绕这个主题提出了很多问题,但没有一个问题对我有所帮助:( 我试图在通过WebView传递参数时调用java方法在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 :(得分:0)
关于方法#1,实际上你不能将VideoView
放在WebView
内,因为后者纯粹用于绘制网页。
关于方法#2,请注意,{UI}主线程中未执行JavascriptInterface
,因为它是从JS引擎调用的。即如果您有权访问UI组件(在您的情况下,您通过VideoView
操纵findViewById()
),则需要将其移动到UI主线程中。因为在Android中,某些操作,尤其是视图操作,只允许在UI主线程中执行。
更具体地说,您可能希望使用runOnUiThread(),或发送意图来启动MainActivty.java
中的视频。