android里如何调用Js里的函数
Android中内置了WebKit模块,而该模块的Java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持Http、Https、Ftp和JavaScript请求。1、在Assets下放一个简单的html文件jstest.html function showMsg(){ alert("hello world!"); } function showMsgInAndroid(){ myjs.showMsg('hello in android!'); }测试js使用调用android方法2、布局文件main.xml 3、然后是Activity,MainActivity.java package com.harold.jstest;import com.harold.base.JSKit;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.widget.Button;public class MainActivity extends Activity {private WebView mWebView;private Button btnShowInfo;private JSKit js;private Handler mHandler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//初始化控件mWebView = (WebView) findViewById(R.id.wv_test);btnShowInfo = (Button) findViewById(R.id.btn_showmsg);//实例化js对象js = new JSKit(this);//设置参数mWebView.getSettings().setBuiltInZoomControls(true);//内容的渲染需要webviewChromClient去实现,//设置webviewChromClient基类,解决js中alert不弹出的问题和其他内容渲染问题mWebView.setWebChromeClient(new WebChromeClient());mWebView.getSettings().setJavaScriptEnabled(true);//把js绑定到全局的myjs上,myjs的作用域是全局的,初始化后可随处使用mWebView.addJavascriptInterface(js, "myjs");mWebView.loadUrl("file:///android_asset/jstest.html");btnShowInfo.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mHandler.post(new Runnable() {@Overridepublic void run() {//调用 HTML 中的javaScript 函数mWebView.loadUrl("javascript:showMsg()");}});}});}}
android stub.asinterface是什么意思
参考如下博客内容:
IxxxxService.Stub.asInterface(IBinder obj) :
这个函数是干啥用呢?首先当bindService之后,客户端会得到一个Binder引用,是Binder 哟,不是IxxxxService.Proxy实例,那这样的话,我们第一个想法是利用Binder引用作为参数实例化出一个IxxxxService.Proxy。Ok, 但如果服务端和客户端都是在同一个进程呢,还需要利用IPC吗?这样就不需要了,直接将IxxxxService当做普通的对象调用就成了。Google 的同志们他们利用IxxxxService.Stub.asInterface函数对这两种不同的情况进行了统一,也就是不管你是在同一进程还是不同进程,那么在拿到Binder引用后,调用IxxxxService.Stub.asInterface(IBinder obj) 即可得到一个IxxxxService 实例,然后你只管调用IxxxxService里的函数就成了。