一、资料
(1)高德地图的官方文档: https://lbs.amap.com/api/amap-mobile/gettingstarted
Android包名:com.autonavi.minimap
iOS Scheme:iosamap
(2)百度地图的官方文档:http://lbsyun.baidu.com/index.php?title=uri/api/android
Android包名:com.baidu.BaiduMap
iOS Scheme:baidumap
二、实现
2.1 H5调用方式举例:
<a href="androidamap://navi?sourceApplication=appname&poiname=fangheng&lat=36.547901&lon=104.258354&dev=1&style=2">导航</a>
2.2 android端实现
/**
* 检测程序是否安装
*
* @param packageName
* @return
*/
private boolean isInstalled(String packageName) {
PackageManager manager = mContext.getPackageManager();
//获取所有已安装程序的包信息
List<PackageInfo> installedPackages = manager.getInstalledPackages(0);
if (installedPackages != null) {
for (PackageInfo info : installedPackages) {
if (info.packageName.equals(packageName))
return true;
}
}
return false;
}
/**
* 根据URI打开第三方app
* @param uri
*/
private void openThird(String uri){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(uri));
mActivity.startActivity(intent);
}
@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
Log.i("加载:",url);
//高德地图
if (url.startsWith("androidamap://") && isInstalled(GAODE_PACKAGENAME)){
openThird(url);
return true;
}
//百度地图
if (url.startsWith("baidumap://") && isInstalled(BAIDUMAP_PACKAGENAME)){
openThird(url);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
2.3 iOS端实现
2.3.1 添加白名单
2.3.2 webview代理方法拦截处理
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
//处理高德和百度地图
if ([_connDistinct contains:@"iosamap://"] || [_connDistinct contains:@"baidumap://"] ) {
[self openThird:_connDistinct];
decisionHandler(WKNavigationActionPolicyCancel);
return;
}