三步搞定:Vue.js调⽤Android原⽣操作
第⼀步: Android对Js的接⼝,新建AndroidInterfaceForJs.js
t.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.widget.Toast;
import com.just.agentweb.AgentWeb;
import com.yidumedical.ui.activity.PAWebActivity;
/**
* Created by shiby on 2018/1/24.
*/
public class AndroidInterfaceForJS {
private Handler deliver = new MainLooper());
private AgentWeb agent;
private Context context;
public AndroidInterfaceForJS(AgentWeb agent, Context context) {
this.agent = agent;
}
@JavascriptInterface
public void callAndroid(final String msg) {
deliver.post(new Runnable() {
@Override
public void run() {
Log.i("Info", "main Thread:" + Thread.currentThread());
Toast.ApplicationContext(), "" + msg, Toast.LENGTH_LONG).show();
}
});
Log.i("Info", "Thread:" + Thread.currentThread());
}
}
第⼆步:给WebView中的window注⼊对象(例⼦使⽤的是AgentWeb)
private void init(){
mAgentWeb = AgentWeb
.with(this)//传⼊Activity or Fragment
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//传⼊AgentWeb 的⽗控件,如果⽗控件为 RelativeLayout ,那么第⼆参数需要传⼊ RelativeLayout.LayoutParams ,第⼀个参数和第⼆个参数应该对应。  .useDefaultIndicator()// 使⽤默认进度条
.defaultProgressBarColor() // 使⽤默认进度条颜⾊
原生安卓app开发
.createAgentWeb()//
.ready()
.go(baseURL);
//注⼊对象
AgentWebSettings agentWebSettings = AgentWebSettings();
}
注⼊对象:
//注⼊对象
第三步:在Vue⾥⾯直接调⽤⽅法(简单粗暴法):
window.android.callAndroid('调⽤成功,耶')
考虑到项⽬的可维护性,⼀般不这样写。
优雅法:
新建app.js
const android = window.android
export { android }
将 window.android存在该模块,⽅便更改
然后在需要的.js或者.vue⽂件中,导⼊app模块,然后使⽤
import {android} from '../app'
try {
android.callAndroid('调⽤成功,耶')
} catch (e) {
console.log('出现错误, 如果在⾮android环境下访问, 出现该警告是正常的.')
}
补充知识:vue与原⽣安卓相互调⽤
最近公司有做直播类的项⽬,由于直播框架限制,限制所⽤的技术是vue搭建的H5页⾯嵌⼊到原⽣安卓中。由于之前没有过类似的混合开发经验,所以今天写篇博客加深下印象。
vue.js调⽤安卓⽅法
先将vue项⽬放到⼀个内⽹地址或者外⽹地址中,然后安卓端通过“webView.loadUrl()”将vue项⽬引⼊。安卓端将要调⽤的⽅法名暴露在window对象中,由vue直接在methods中调⽤并携带参数。
methods:{
goPublish(){
//将vue项⽬引⼊⾄安卓代码中,安卓⽅法暴露在window中,vue中可以直接⽤window去调取⽅法。
window.android.callAndroidMethod('1','2')
}
}
安卓调⽤vue.js中的⽅法
同样的vue也需要把⽅法添加到window中去,再由安卓端去调取⽅法。
created(){
//需要在created钩⼦中将⽅法添加到window对象中
window.setFun = this.setFun;
},
methods:{
setFun(arg) {
//arg: 原⽣调⽤Vue时传值(arg)给Vue
console.log("获取到android的传参:" + arg);
},
}
以上就是vue与安卓端项⽬调⽤的⼤致⽅法,有⽤词不当的地⽅望海涵且不吝指正。希望能给⼤家⼀个参考,也希望⼤家多多⽀持。