ReactNative 调用手机地图(高德、百度)导航 Android
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ReactNative 调用手机地图(高德、百度)导航 Android,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4004字,纯文字阅读大概需要6分钟。
内容图文
由于项目需要,鉴于第三方sdk包的体积略大,经过评估论证后,决定采用调起APP以及网页地图的方式来进行导航。
思路:
在需要调用导航的界面通过原生获取当前手机内可用的导航app组装成列表返回到RN待选择调用,如果没有安装任何APP,则直接请求浏览器打开web版百度地图。需要注意的是,这里笔者选择百度定位sdk取得坐标,然后通过高德在线服务将百度坐标转换为高德坐标。
集成:
1、获取可用的地图列表:
/**
* 百度地图包名
*/
public
static
final String PACKAGE_NAME_BD_MAP = "com.baidu.BaiduMap";
/**
* 高德地图包名
*/publicstaticfinal String PACKAGE_NAME_MINI_MAP = "com.autonavi.minimap";
@ReactMethod
publicvoid getAvailableMapNames(final Callback callback) {
Map<String, String> names = new HashMap();
if (isAvailable(this.getCurrentActivity(), PACKAGE_NAME_BD_MAP)) {
names.put(PACKAGE_NAME_BD_MAP, "百度地图");
}
if (isAvailable(this.getCurrentActivity(), PACKAGE_NAME_MINI_MAP)) {
names.put(PACKAGE_NAME_MINI_MAP, "高德地图");
}
callback.invoke(JsonHelper.toJSONString(names));
}
2、选择地图,打开导航:
/**
*
@param
pkgName
*
@param
param
*/
@ReactMethod
public
void openNavMap(String pkgName, String param, final Callback callback) {
if (isBlank(param)) {
ResponseModel responseModel = new ResponseModel();
responseModel.setErrmsg("参数为空");
callback.invoke(JsonHelper.toJSONString(responseModel));
return;
}
try {
JSONObject data = new JSONObject(param);
String originLat = data.get("originLat").toString();
String originLng = data.get("originLng").toString();
String destLat = data.get("destLat").toString();
String destLng = data.get("destLng").toString();
if (isBlank(pkgName)) {
//http://lbsyun.baidu.com/index.php?title=uri/api/web
String url = "http://api.map.baidu.com/direction?origin=%s,%s&destination=%s,%s®ion=%s&mode=driving&output=html&src=%s";
// 打开网页
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri contentUrl = Uri.parse(String.format(url, originLat, originLng, destLat, destLng, this.getName(),
this.getName()));
intent.setData(contentUrl);
this.getCurrentActivity().startActivity(intent);
return;
}
String tmpName = pkgName.trim();
if (tmpName.equals(PACKAGE_NAME_BD_MAP)) {
Intent i1 = new Intent();
// 驾车导航
i1.setData(Uri.parse(String.format("baidumap://map/navi?location=%s,%s", destLat, destLng)));
this.getCurrentActivity().startActivity(i1);
} elseif (tmpName.equals(PACKAGE_NAME_MINI_MAP)) {
//http://lbs.amap.com/api/amap-mobile/guide/android/navigation
StringBuffer scheme = new StringBuffer("androidamap://navi?sourceApplication=").append(this.getName());
// if (!TextUtils.isEmpty(poiname)){
// stringBuffer.append("&poiname=").append(poiname);
// }
// dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
// style 必填 导航方式(0 速度快; 1 费用少; 2 路程短; 3 不走高速;4 躲避拥堵;5
// 不走高速且避免收费;6 不走高速且躲避拥堵;7 躲避收费和拥堵;8 不走高速躲避收费和拥堵))
scheme.append("&lat=").append(destLat).append("&lon=").append(destLng).append("&dev=").append(0)
.append("&style=").append(0);
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(scheme.toString()));
intent.setPackage("com.autonavi.minimap");
this.getCurrentActivity().startActivity(intent);
}
} catch (JSONException e) {
e.printStackTrace();
ResponseModel responseModel = new ResponseModel();
responseModel.setErrmsg("数据解析错误");
callback.invoke(JsonHelper.toJSONString(responseModel));
}
}
其中辅助检查方法为:
1
/**
2
* 检查手机上是否安装了指定的软件
3
*
4
*
@param
context
5
*
@param
packageName
6
* 应用包名
7
*
@return
8
*/
9
private
static
boolean
isAvailable(Context context, String packageName) {
10
final PackageManager packageManager = context.getPackageManager();
1112// 获取所有已安装程序的包信息13 List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
1415// 用于存储所有已安装程序的包名16 List<String> packageNames = new ArrayList<>();
1718// 从pinfo中将包名字逐一取出,压入pName list中19if (packageInfos != null) {
20for (int i = 0; i < packageInfos.size(); i++) {
21 String packName = packageInfos.get(i).packageName;
22 packageNames.add(packName);
23 }
24 }
2526// 判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE27return packageNames.contains(packageName);
28 }
然后在RN界面显示列表调用代码即可。
原文:http://www.cnblogs.com/univalsoft-mobile-team/p/7637574.html
内容总结
以上是互联网集市为您收集整理的ReactNative 调用手机地图(高德、百度)导航 Android全部内容,希望文章能够帮你解决ReactNative 调用手机地图(高德、百度)导航 Android所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。