Android与JS之间的互调
16lz
2021-01-25
本例以加载本地Html文件来写Demo
WebView加载本地html文件,可以将Html文件放在:assets文件中
myWebView.loadUrl("file:///android_asset/XX.html");
Android与JS交互,必须对WebView进行一下设置
WevSettings webSettings = webView.getSettings();webSettings.setJavaScriptEnable(true);
Android与JS的交互,需要创建一个桥接对象,通过桥接对象来实现交互
public class JSHook { @JavascriptInterface public void javaMethod(String p) { if (!TextUtils.isEmpty(p)) { text.setText(p); } } @JavascriptInterface public void showAndroid() { final String phone = Build.MODEL; MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { webView.loadUrl("javascript:show('" + phone + "')"); } }); } }
WebView通过addJavascriptInterface方法将js与Android通过桥接对象进行连接
webView.addJavascriptInterface(new JSHook(), "demo");
下面是整体代码
Html代码:
Js与Android互调Demo 测试
public class MainActivity extends AppCompatActivity { private static final String URL = "file:///android_asset/html.html"; private WebView webView; private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.text); webView = (WebView) findViewById(R.id.webview); webView.loadUrl(URL); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new JSHook(), "demo"); } public class JSHook { @JavascriptInterface public void javaMethod(String p) { if (!TextUtils.isEmpty(p)) { text.setText(p); } } @JavascriptInterface public void showAndroid() { final String phone = Build.MODEL; MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { webView.loadUrl("javascript:show('" + phone + "')"); } }); } }}
布局文件xml代码
<?xml version="1.0" encoding="utf-8"?>
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android之Fragment多个页面切换实现
- 自定义时间控件
- android studio错误: 常量字符串过长
- Android高级技巧