android JS 互相调用
16lz
2021-12-04
public class SystemWebView extends Activity { Button button; WebView webView ; WebSettings webSetting; @JavascriptInterface @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_system_webview); button = (Button)findViewById(R.id.button); webView = (WebView)findViewById(R.id.webView); //加载网页 webView.loadUrl("file:///android_asset/hello.html"); WebSettings settings = webView.getSettings(); settings.setDefaultTextEncodingName("GBK");//设置字符编码 settings.setJavaScriptEnabled(true); //网页是否允许JS运行 //给js window 添加子节点,方便js调用android 方法,子节点名为JsCallAndroid webView.addJavascriptInterface(new JSCallAndroid(), "JsCallAndroid"); //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //对网页中超链接的打开,返回值是true的时候控制用WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url); return true; } }); webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { // TODO Auto-generated method stub return super.onJsAlert(view, url, message, result); } }); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { webView.loadUrl("javascript: showFromHtml2('android said:')"); } }); } class JSCallAndroid{ @JavascriptInterface public void htmlCallAndroid(){ Uri smsToUri = Uri.parse("smsto:"); Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri); intent.putExtra("sms_body", "网页使用发短信"); startActivity(intent); } @JavascriptInterface public String htmlCallAndroid2(final String str){ Gson gson = new Gson(); JSONObject jsonObject = null; try { jsonObject = new JSONObject(str); String name = jsonObject.getString("name"); String password = jsonObject.getString("password"); return "{\"name\":" + name + " turn," + "\"password\":"+ password + " turn}"; } catch (JSONException e) { e.printStackTrace(); } return null; } } }
html 网页
<!doctype html><html lang="en"> <head> <meta charset="GBK"> <title>Document</title> <script> function showFromHtml2(param){ alert(param + "我调用"); } function subInput(){ var name = document.getElementById("name").value; var password = document.getElementById("password").value; var str = '{"name":"' + name + '","password":"' + password +'"}'; //调用android 的方法 var str2 = window.JsCallAndroid.htmlCallAndroid2(str); alert(str2); } function sendMsg(){ //调用android的方法 window.JsCallAndroid.htmlCallAndroid(); } </script> </head> <body> <form> 用户名:<input id="name" type="email" name="email"/> <br/> 密码: <input id="password" type="text" name="password"/> </br> <input type="submit" value="提交" onclick="subInput()"/> <input type="button" value="调用发短信页面" onclick="sendMsg()"/> </form> </body></html>
更多相关文章
- android休眠与唤醒驱动流程分析
- 打开android默认浏览器
- android调用系统通讯录
- Timer实现倒计时
- android练习一之简易浏览器
- android 调用图库并显示选择的图片
- Android(安卓)AES加密工具类,解决只能加密不能解密问题
- 分享一个两个Android(安卓)scrollView同时滚动的方法
- Android(安卓)调用.NET webservice