前言:随着前端技术越来越火。许多app中不在是简单的Android原生应用,加入了很多web页。通过android的webView加载一个html。并且我们通常的一些落地页都是用html显示的。那么对于一些具有特殊功能的落地页。比如具有引导注册功能的,用户点击落地页之后跳转App的注册页面,或者登录页面。那么,这就需要html和Android原生进行交互,相互调用。
原理分析
android调用javascript方法:
直接通过webView.loadUrl("JavaScript:show('"+et.getText().toString()+"')");,其实就是直接通过loadUrl()方法,传入javascropt:+方法名。
javascript调用Android方法
(1)定义一个对象,包含js需要调用方法的定义和实现。
(2)webView.addJavascriptInterface(new Object(), "obj");传入。
(3)js调用。
使用方法
(1)定义Android对象
首先需要定义一个类,该类主要用于定义一些方法(接口),以便js调用。
private classObject {
@JavascriptInterface
public void intent2Activity(String activity){
if(activity.equals("login")){
Intent intent =new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
}
}
@JavascriptInterface
public void showDialog(String str){
AlertDialog dialog =newAlertDialog.Builder(MainActivity.this)
.setTitle("消息")
.setMessage(str)
.setPositiveButton("确定",null)
.setNegativeButton("取消",null)
.create();
dialog.show();
}
}
定义了两个方法,一个是跳转activity的方法,另一个是显示消息的方法。
注意:方法前一定要加上注解@JavascriptInterface,不然会没有效果。
在Activity中加入webView,并查找控件,进行一些初始化操作
@SuppressLint("JavascriptInterface")
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = ((EditText) findViewById(R.id.et));
//加载页面
webView = (WebView) findViewById(R.id.webView);
//允许JavaScript执行
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDefaultTextEncodingName("utf-8");
// 添加一个对象, 让JS可以访问该对象的方法
webView.addJavascriptInterface(newObject(),"obj");
//找到Html文件,也可以用网络上的文件
webView.loadUrl("file:///android_asset/index.html");
}
webView.addJavascriptInterface(new Object(), "obj");相当于向html中传入了定义的接口对象,对象名为obj。
定义Html对象
因为我用的是android studio,所以在main目录下创建目录assets,并创建文件index.html