cordova 帮助webapp 达到调用原生系统的功能

项目需求:在项目中调用系统中含有的第三方地图应用

需求其实分为两步:

1. 查找本地地图应用

2.成功调起本地应用

首先需要安装两个插件,安装指令如下:

1. cordova plugin add cordova-plugin-appavailability --save

2. cordova plugin add https://github.com/lampaa/com.lampa.startapp.git

第一个安装的是检测应用包名的插件,第二个安装的是启动第三方应用的插件

检测代码:

appAvailability.check("com.baidu.BaiduMap",function () {
//success callback
},function () {
//error callback
});
启动代码:

var sApp = startApp.set({ /* params */
"action":"ACTION_VIEW",
"category":"CATEGORY_DEFAULT",
"type":"text/css",
"package":"com.baidu.BaiduMap",
"uri":"baidumap://map/direction?origin=name:"+originName+"|latlng:"+origin[0]+","+origin[1]+"&destination=name:"+destinationName+"|latlng:"+destination[0]+","+destination[1]+"&mode=driving",
"flags":["FLAG_ACTIVITY_CLEAR_TOP","FLAG_ACTIVITY_CLEAR_TASK"],
"intentstart":"startActivity"
});

sApp.start(function() { /* success */
alert("OK");
}, function(error) { /* fail */
alert(error);
});
这里是以调用地图应用---百度地图为例

对于url中含有的参数说明:

originName:起始地名称
    origin[0]:起始纬度
    origin[1]:起始经度
    destinationName:终点名称
    destination[0]:终点纬度
    destination[1]:终点经度

其他地图类应用的包名如下:

百度地图:com.baidu.BaiduMap
       高德地图:com.autonavi.minimap
       腾讯地图:com.tencent.map
       谷歌地图:com.google.android.apps.maps

常用地图API

常用地图的API:

1.百度地图            http://lbsyun.baidu.com/index.php?title=uri/api/web
                                 调起App的uri:baidumap://map/direction

2.腾讯地图            https://lbs.qq.com/uri_v1/guide-route.html
                                  调起App的uri:qqmap://map/routeplan

3.高德地图            https://lbs.amap.com/api/uri-api/guide/travel/route
                                 调起App的uri:amapuri://route/plan/

4.谷歌地图            地图开发地址不可用
                                 调起App的uri:google.navigation:q= 或者 http://maps.google.com/maps

注意: cordova 运行版本需6.3.0以上。

发散应用:

可以分别利用两个插件,检测应用包名,或者调起第三方应用,或者一起使用检测某个第三方应用的存在,并传参调起。

参考自:

ionic开发——检测是否安装某APP,如果安装打开该APP
ionic项目中使用cordova插件跳转第三方地图APP(百度、高德)
第一步,安装cordova插件

cordova plugin add https://github.com/lampaa/com.lampa.startapp.git //打开第三方APP
cordova plugin add cordova-plugin-appavailability --save//检测是否存在第三方App
cordova plugin add cordova-plugin-inappbrowser //应用内置浏览器

第二步,配置config.xml(以百度地图为例):

//ios
<allow-intent href="baidumap://*/*" />
//android
<allow-intent href="bdapp://*/*" />
第三步,代码实现

var scheme;
// 不同的平台实现方式是不同的
if (ionic.Platform.isAndroid()) {
//android
scheme = 'com.baidu.BaiduMap';
appAvailability.check(
scheme, // URI Scheme or Package Name
function() { // Success callback
alert(scheme + ' is available :)');
var sApp = startApp.set({ /* params */
"action":"ACTION_MAIN",
    "category":"CATEGORY_DEFAULT",
    "type":"text/css",
    "package":"com.baidu.BaiduMap",
    "uri":"file://data/index.html",
    "flags":["FLAG_ACTIVITY_CLEAR_TOP","FLAG_ACTIVITY_CLEAR_TASK"],
    // "component": ["com.android.GoBallistic","com.android.GoBallistic.Activity"],
    "intentstart":"startActivity",
}, { /* extras */
"EXTRA_STREAM":"extraValue1",
"extraKey2":"extraValue2"
});
sApp.start(function() { /* success */
alert("OK");
}, function(error) { /* fail */
alert(error);
});
},
function() { // Error callback
// 不存在对应APP
alert(scheme + ' is not available :(');
// 打开百度地图下载地址
window.open("market://search?q=com.baidu.BaiduMap")
}
);
} else {
// ios
scheme = 'baidu://';
appAvailability.check(
scheme, // URI Scheme or Package Name
function() { // Success callback
alert(scheme + ' is available :)');
var sApp = startApp.set("baidumap://");
sApp.start(function() { /* success */
alert("OK");
}, function(error) { /* fail */
alert(error);
});
},
function() { // Error callback
alert(scheme + ' is not available :(');
// 打开store下载百度地图 window.open("https://itunes.apple.com/cn/app/id452186370")
}
);
}

对于ios9+需要配置白名单,否则检测无效:

//在项目的Info.plist文件配置
<key>LSApplicationQueriesSchemes</key>
<array>
<string>baidumap</string>
</array>

cordova调用第三方应用的更多相关文章

  1. C#的Process类调用第三方插件实现PDF文件转SWF文件

    在项目开发过程中,有时会需要用到调用第三方程序实现本系统的某一些功能,例如本文中需要使用到的swftools插件,那么如何在程序中使用这个插件,并且该插件是如何将PDF文件转化为SWF文件的呢?接下来 ...

  2. WebService学习总结(四)——调用第三方提供的webService服务

    http://www.cnblogs.com/xdp-gacl/p/4260627.html 互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他 ...

  3. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  4. [转]Git调用第三方对比工具beyondCompare

    点击阅读原文 对于我这种 git 命令行小白来说, git 自带的对比工具各种水土不服,想念以前的 svn 小乌龟 + beyondCompare 的日子...纠结完 gitHub client 未果 ...

  5. ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件

    1.自己的APP调用第三方打开文件 主要是使用  UIDocumentInteractionController  类   并实现 UIDocumentInteractionControllerDel ...

  6. ThinkPHP自动获取关键词(调用第三方插件)

    ThinkPHP自动获取关键词调用在线discuz词库 先按照下图路径放好插件 方法如下 /** * 自动获取关键词(调用第三方插件) * @return [type] [description] * ...

  7. Android JNI如何调用第三方库

    http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...

  8. Android如何调用第三方SO库

    问题描述:Android如何调用第三方SO库:已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明:已了解解决方案:1.将SO文件直接放到libs/armeabi下,然后 ...

  9. C# 调用第三方DLL完整实例

    C# 调用第三方DLL完整实例 分类: C/C++ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代码. public class ExecuteDLL : Form { ...//忽 ...

随机推荐

  1. Controller的激活(2)

    通过VS 的Controller 创建想到创建的Controller 类型 实际上继承了抽象类System.Web.Mvc.Controller,他是ControllerBase的子类,抽象类Syst ...

  2. 调皮的js

    一.中文变量名 今天偶然看文章.看到js的var还可以用中文做变量名,那么我们试试,看看中文的变量名是否能打印出值呢? var 临时变量="111"; console.log(临时 ...

  3. hive表分区相关操作

    Hive 表分区 Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTIT ...

  4. MIME Type介绍 Content-Type 各种定义

    多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格 ...

  5. cc2530的第二次实验,用按键控制流水灯

    按键控制流水灯 具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍 实验相关寄存器 实验相关电路 宏定义 #define uint unsigned int #define uchar ...

  6. 洛谷 P1144 最短路计数 题解

    P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...

  7. 从编程哲学到开发应用:Spring的初步应用

    一.前言 在学习Spring的过程中,我们学习了很多东西,可是实际应用中,我们究竟用到了那些?常用的又是那种方法呢? 二.书上与开发的差异 1.IOC 1) IOC,控制反转,是Spring框架的核心 ...

  8. leetcode:7. 整数反转

    题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例: 输入: 123 输出: 321 输入: -123 输出: -321 输入: 120 输出: 21 注意:假 ...

  9. Java 内存排查,慢慢收集总结

    Java堆外内存排查小结: https://mp.weixin.qq.com/s?__biz=MzA4MTc4NTUxNQ==&mid=2650518612&idx=2&sn= ...

  10. No Suitable Driver Found For Jdbc

    今天出现编码出现了No suitable driver found for jdbc,又是找遍了网上的资料,基本上都说是三个问题:    一是:连接URL格式出现了问题(Connection conn ...