Android 通过Intent调取导航

前言

公司以前有个需求,需要使用导航,但是工期很短,那么怎么解决呢?我们想到了URL Scheme来实现

URL Scheme是什么

android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

Map APP相关

目前市场上占有率比较高的地图主要有:百度,高德,谷歌(CN大陆暂时不能使用),腾讯

四大公司相关的API平台问题

百度地图:http://lbsyun.baidu.com/index.php?title=uri/api/android

高德地图:http://lbs.amap.com/api/uri-api/android-uri-explain/

腾讯地图:http://lbs.qq.com/uri_v1/index.html

谷歌地图:https://developers.google.com/maps/documentation/android-api/intents

代码示例

检查是否安装

* 检查手机上是否安装了指定的软件

* @param context

* @param packageName:应用包名

* @return

*/

public static boolean isAvilible(Context context, String packageName){

//获取packagemanager

final PackageManager packageManager = context.getPackageManager();

//获取所有已安装程序的包信息

List packageInfos = packageManager.getInstalledPackages(0);

//用于存储所有已安装程序的包名

List packageNames = new ArrayList();

//从pinfo中将包名字逐一取出,压入pName list中

if(packageInfos != null){

for(int i = 0; i < packageInfos.size(); i++){

String packName = packageInfos.get(i).packageName;

packageNames.add(packName);

}}

//判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE

return packageNames.contains(packageName);

}

百度地图

if(isAvilible(context,"com.baidu.BaiduMap")){//传入指定应用包名

try {

//  intent = Intent.getIntent("intent://map/direction?origin=latlng:34.264642646862,108.95108518068|name:我家&destination=大雁塔&mode=driving®ion=西安&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");

intent = Intent.getIntent("intent://map/direction?" +

//"origin=latlng:"+"34.264642646862,108.95108518068&" +  //起点  此处不传值默认选择当前位置

"destination=latlng:"+location[0]+","+location[1]+"|name:我的目的地"+        //终点

"&mode=driving&" +          //导航路线方式

"region=北京" +          //

"&src=慧医#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");

context.startActivity(intent); //启动调用

} catch (URISyntaxException e) {

Log.e("intent", e.getMessage());

}

}else{

//未安装

//market为路径,id为包名

//显示手机上所有的market商店

Toast.makeText(context, "您尚未安装百度地图", Toast.LENGTH_LONG).show();

Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");

intent = new Intent(Intent.ACTION_VIEW, uri);

context.startActivity(intent);

}

高德地图

if (isAvilible(context, "com.autonavi.minimap")) {

try{

intent = Intent.getIntent("androidamap://navi?sourceApplication=慧医&poiname=我的目的地&lat="+location[0]+"&lon="+location[1]+"&dev=0");

context.startActivity(intent);

} catch (URISyntaxException e)

{e.printStackTrace(); }

}else{

Toast.makeText(context, "您尚未安装高德地图", Toast.LENGTH_LONG).show();

Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");

intent = new Intent(Intent.ACTION_VIEW, uri);

context.startActivity(intent);

}

谷歌地图:

if (isAvilible(context,"com.google.android.apps.maps")) {

Uri gmmIntentUri = Uri.parse("google.navigation:q="+location[0]+","+location[1] +", + Sydney +Australia");

Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);

mapIntent.setPackage("com.google.android.apps.maps");

context.startActivity(mapIntent);

}else {

Toast.makeText(context, "您尚未安装谷歌地图", Toast.LENGTH_LONG).show();

Uri uri = Uri.parse("market://details?id=com.google.android.apps.maps");

intent = new Intent(Intent.ACTION_VIEW, uri);

context.startActivity(intent);  }

腾讯地图

腾讯暂时不提供相关接口

你可能感兴趣的:(Android 通过Intent调取导航)