開發app時候,地(di)圖(tu)跳轉是很常(chang)見的(de)一(yi)個功(gong)能(neng),告訴你(ni)經緯度就可(ke)以(yi)實現(xian)(xian)(xian)喚(huan)醒百(bai)度、高德(de)、騰訊地(di)圖(tu)進行地(di)圖(tu)導航(hang),在加上關(guan)鍵字就可(ke)以(yi)實現(xian)(xian)(xian)周邊功(gong)能(neng)的(de)實現(xian)(xian)(xian),前臺需要(yao)動態判斷手(shou)機(ji)上安裝了哪些地(di)圖(tu)軟件(jian),若(ruo)有(you)則顯示(shi)出來,沒(mei)有(you)則不顯示(shi),若(ruo)用戶(hu)手(shou)機(ji)上沒(mei)有(you)安裝任何導航(hang)軟件(jian)app,則需要(yao)引導用戶(hu)去下載一(yi)款地(di)圖(tu)app軟件(jian)。
由(you)(you)于我這(zhe)是h5開發環境,所以界面由(you)(you)h5處理,只(zhi)提供后(hou)臺的兩個接(jie)口,一(yi)個接(jie)口是判斷(duan)用戶手機上安裝了哪些導航軟件,一(yi)個接(jie)口是進行地(di)圖導航和周邊功能的實(shi)現。然(ran)后(hou)js調android即可(ke)實(shi)現。
一、api地址
先放上百度、高(gao)德(de)、騰(teng)訊地圖(tu)調起API文檔地址,有些參數(shu)不(bu)懂可以(yi)參考。
1、百度地圖
2、高德地圖
3、騰訊地圖
二、android后臺接口提供給前臺h5調用如下:
/**
* 選擇地圖
* @param lat 緯度
* @param lon 經度
* @param poiname 地址
* @param type 1表示高德 2表示百度 3表示騰訊
* @param selectType 1表示導航類型, 2表示周邊類型
* @param keyWords 關鍵字
* @param poiname
*/
@JavascriptInterface
public void makeUpMap (String lat,String lon,String poiname,int type,int selectType,String keyWords) {
Intent intent = new Intent();
if (mapBean.getGaoDei() == null && mapBean.getTenXun() == null && mapBean.getBaiDu() == null) {
goToMarket(mContext, "com.autonavi.minimap");
mContext.startActivity(intent);
}
//高德地圖
if (mapBean.getGaoDei() == "1" && type == 1) {
if (selectType == 1) {
intent.setData(Uri.parse("androidamap://viewMap?sourceApplication=appname&poiname=" + poiname + "&lat=" + lat +"&lon="+ lon +"&dev=0"));
} else if (selectType == 2) {
intent.setData(Uri.parse("androidamap://arroundpoi?sourceApplication=softname&keywords="+ keyWords +"&lat=" + lat + "&lon="+ lon + "&dev=0"));
}
}
//百度地圖
if (mapBean.getBaiDu() == "2" && type == 2) {
if (selectType == 1) {
intent.setData(Uri.parse("baidumap://map/marker?location=" + lat + ","+ lon + "&title=" + poiname + "&content="+ "" +"&traffic=on"));
} else if (selectType == 2) {
intent.setData(Uri.parse("baidumap://map/place/nearby?query="+ keyWords +"¢er=" + lat + "," + lon + ""));
}
}
//騰訊地圖
if (mapBean.getTenXun() == "3" && type == 3) {
if (selectType == 1) {
intent.setData(Uri.parse("//apis.map.qq.com/uri/v1/marker?marker=coord:"+ lat + "," + lon + ";" + "title:" + poiname + ";addr:" + " " + "&referer=myapp"));
} else if (selectType == 2) {
intent.setData(Uri.parse("//apis.map.qq.com/uri/v1/search?keyword="+ keyWords +"¢er="+ lat + "," + lon +"&radius=5000&referer=myapp"));
}
}
mContext.startActivity(intent);
}
/**
* 判斷手機地圖是否安裝 高德地圖:com.autonavi.minimap 百度地圖:com.baidu.BaiduMap 騰訊地圖
*
* @return
*/
@JavascriptInterface
public String isInstallByread() {
mapBean = new MapBean();
//高德地圖
if(new File("/data/data/" + "com.autonavi.minimap").exists()) {
mapBean.setGaoDei("1");
}
//百度地圖
if (new File("/data/data/" + "com.baidu.BaiduMap").exists()) {
mapBean.setBaiDu("2");
}
//騰訊地圖
if (new File("/data/data/" + "com.tencent.map").exists()) {
mapBean.setTenXun("3");
}
//google地圖
// if (new File("/data/data/" + "com.google.android.apps.maps").exists()) {
// mapBean.setGoogleMap("4");
// }
return new Gson().toJson(mapBean);
}
/**
* 去市場下載頁面
*/
public void goToMarket(Context context, String packageName) {
Uri uri = Uri.parse("market://details?id=" + packageName);
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
try {
context.startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
}
所使用到的(de)實(shi)體類是:
/**
* Created by zhaoyihuan on 2018/3/8.
*/
public class MapBean {
String baiDu;
String gaoDei;
String tenXun;
public String getTenXun() {
return tenXun;
}
public void setTenXun(String tenXun) {
this.tenXun = tenXun;
}
public String getBaiDu() {
return baiDu;
}
public void setBaiDu(String baiDu) {
this.baiDu = baiDu;
}
public String getGaoDei() {
return gaoDei;
}
public void setGaoDei(String gaoDei) {
this.gaoDei = gaoDei;
}
調(diao)用(yong)(yong)肯定是用(yong)(yong)webview來調(diao)用(yong)(yong),那后臺接(jie)口就(jiu)到此結束了。