三步搞定:Vue.js調(diào)用Android原生操作
第一步: Android對(duì)Js的接口,新建AndroidInterfaceForJs.js
import android.content.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 Handler(Looper.getMainLooper());
private AgentWeb agent;
private Context context;
public AndroidInterfaceForJS(AgentWeb agent, Context context) {
this.agent = agent;
this.context = context;
}
@JavascriptInterface
public void callAndroid(final String msg) {
deliver.post(new Runnable() {
@Override
public void run() {
Log.i("Info", "main Thread:" + Thread.currentThread());
Toast.makeText(context.getApplicationContext(), "" + msg, Toast.LENGTH_LONG).show();
}
});
Log.i("Info", "Thread:" + Thread.currentThread());
}
}
第二步: 給WebView中的window注入對(duì)象(例子使用的是AgentWeb)
private void init(){
mAgentWeb = AgentWeb
.with(this)//傳入Activity or Fragment
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 ,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams ,第一個(gè)參數(shù)和第二個(gè)參數(shù)應(yīng)該對(duì)應(yīng)。
.useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
.defaultProgressBarColor() // 使用默認(rèn)進(jìn)度條顏色
.createAgentWeb()//
.ready()
.go(baseURL);
//注入對(duì)象
mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterfaceForJS(mAgentWeb,this.getApplicationContext()));
AgentWebSettings agentWebSettings = mAgentWeb.getAgentWebSettings();
agentWebSettings.getWebSettings().setDomStorageEnabled(true);
}
注入對(duì)象:
//注入對(duì)象
mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterfaceForJS(mAgentWeb,this.getApplicationContext()));
第三步:在Vue里面直接調(diào)用方法(簡(jiǎn)單粗暴法):
window.android.callAndroid('調(diào)用成功,耶?。?!')
考慮到項(xiàng)目的可維護(hù)性,一般不這樣寫(xiě)。
優(yōu)雅法:
新建app.js
const android = window.android
export { android }
將 window.android存在該模塊,方便更改
然后在需要的.js或者.vue文件中,導(dǎo)入app模塊,然后使用
import {android} from '../app'
try {
android.callAndroid('調(diào)用成功,耶?。?!')
} catch (e) {
console.log('出現(xiàn)錯(cuò)誤, 如果在非android環(huán)境下訪問(wèn), 出現(xiàn)該警告是正常的.')
}
補(bǔ)充知識(shí):vue與原生安卓相互調(diào)用
最近公司有做直播類(lèi)的項(xiàng)目,由于直播框架限制,限制所用的技術(shù)是vue搭建的H5頁(yè)面嵌入到原生安卓中。由于之前沒(méi)有過(guò)類(lèi)似的混合開(kāi)發(fā)經(jīng)驗(yàn),所以今天寫(xiě)篇博客加深下印象。
vue.js調(diào)用安卓方法
先將vue項(xiàng)目放到一個(gè)內(nèi)網(wǎng)地址或者外網(wǎng)地址中,然后安卓端通過(guò)“webView.loadUrl()”將vue項(xiàng)目引入。安卓端將要調(diào)用的方法名暴露在window對(duì)象中,由vue直接在methods中調(diào)用并攜帶參數(shù)。
methods:{
goPublish(){
//將vue項(xiàng)目引入至安卓代碼中,安卓方法暴露在window中,vue中可以直接用window去調(diào)取方法。
window.android.callAndroidMethod('1','2')
}
}
安卓調(diào)用vue.js中的方法
同樣的vue也需要把方法添加到window中去,再由安卓端去調(diào)取方法。
created(){
//需要在created鉤子中將方法添加到window對(duì)象中
window.setFun = this.setFun;
},
methods:{
setFun(arg) {
//arg: 原生調(diào)用Vue時(shí)傳值(arg)給Vue
console.log("獲取到android的傳參:" + arg);
},
}
以上就是vue與安卓端項(xiàng)目調(diào)用的大致方法,有用詞不當(dāng)?shù)牡胤酵:也涣咧刚?。希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue使用watch同時(shí)監(jiān)聽(tīng)多個(gè)值的實(shí)現(xiàn)方法示例
這篇文章主要為大家介紹了Vue中使用watch同時(shí)監(jiān)聽(tīng)多個(gè)值的實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
vue單頁(yè)開(kāi)發(fā)父子組件傳值思路詳解
這篇文章主要介紹了vue單頁(yè)開(kāi)發(fā)父子組件傳值思路詳解,本文是小編抽空整理的思路,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05
在Vue3項(xiàng)目中使用Vuex進(jìn)行狀態(tài)管理的詳細(xì)教程
在?Vue?3?中使用?Vuex?進(jìn)行狀態(tài)管理是一個(gè)很好的實(shí)踐,特別是在涉及到多個(gè)組件間共享狀態(tài)的情況,下面是如何在?Vue?3?項(xiàng)目中設(shè)置和使用?Vuex?的教程,包括?state,?mutations,?actions,?getters?的概念及其用途,需要的朋友可以參考下2024-09-09
淺談vue2 單頁(yè)面如何設(shè)置網(wǎng)頁(yè)title
這篇文章主要介紹了淺談vue2 單頁(yè)面如何設(shè)置網(wǎng)頁(yè)title,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue項(xiàng)目啟動(dòng)出現(xiàn)cannot GET /服務(wù)錯(cuò)誤的解決方法
這篇文章主要介紹了vue項(xiàng)目啟動(dòng)出現(xiàn)cannot GET /服務(wù)錯(cuò)誤的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪
這篇文章主要為大家詳細(xì)介紹了Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
vue彈窗里面使用echarts不顯示的問(wèn)題及解決
這篇文章主要介紹了vue彈窗里面使用echarts不顯示的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

