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);  }

腾讯地图

腾讯暂时不提供相关接口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,912评论 0 17
  • Intent应该算是Android中特有的东西。你可以在Intent中指定程序要执行的动作(比如:view,edi...
    Ten_Minutes阅读 9,026评论 0 6
  • 这个世界 令人感到失望 不是因为它的险恶 而是因为它的平庸 这段生命 ...
    海月先生阅读 3,720评论 0 12
  • 此刻,很想找个地图看看, 从旅行到漂泊, 我走过了多少个城市; 此刻,很想回头看看, 从校园到社会, 我收获了什么...
    等风来的野丫头阅读 1,400评论 0 0
  • 刚开始写公众号的想法很功利,是因为看到好多人通过写作挣到了钱。于是自己也跟风。 每一个人都有从众的心理。这就好比你...
    易小六阅读 3,240评论 5 4

友情链接更多精彩内容