uniapp 调用手机上安装的app (高德地图 百度地图 Apple地图 谷歌地图)

uniapp 调用手机上安装的app (高德地图 百度地图 Apple地图 谷歌地图)

效果

思路

  1. 获取手机类型(安卓/iOS)

    js 复制代码
    let platform = uni.getSystemInfoSync().platform
  2. 判断手机有没有安装需要的应用

    js 复制代码
    plus.runtime.isApplicationExist({action: ""}))
  3. 打开应用 跳转过去

    js 复制代码
    plus.runtime.openURL()

核心代码

html 复制代码
<view slot="value" class="u-slot-title" @click="goMap">
	<u--image :src="goMapImgSrc" width="18px" height="20px"></u--image>
</view>
js 复制代码
data() {
	return {
		latitude: 23.763780,
		longitude: -45.831800,
		shopAddress: "XXXXXXXXXXX",
		}
	}

goMap() {
	const _this = this
	if (!this.latitude || !this.longitude || !this.shopAddress) return
	// 判断系统安装的地图应用有哪些, 并生成菜单按钮
	let _mapName = [{
			title: this.$t('my.order.Gaode Maps'),
			name: 'amap',
			androidName: 'com.autonavi.minimap',
			iosName: 'iosamap://'
		},
		{
			title: this.$t('my.order.Baidu Maps'),
			name: 'baidumap',
			androidName: 'com.baidu.BaiduMap',
			iosName: 'baidumap://'
		}
		{
			title: this.$t('my.order.Google Maps'),
			name: 'googlemap',
			androidName: 'com.google.android.apps.maps',
			iosName: 'comgooglemaps://'
		},
		{
			title: this.$t('my.order.Apple Maps'),
			name: 'applemap',
			androidName: 'com.apple.Maps',
			iosName: 'maps://'
		},
	]
	// 根据真机安装的地图软件 生成操作菜单
	let buttons = []
	let platform = uni.getSystemInfoSync().platform
	platform === 'android' && _mapName.forEach(item => {
		if (plus.runtime.isApplicationExist({
				pname: item.androidName
			})) {
			buttons.push(item)
		}
	})
	platform === 'ios' && _mapName.forEach(item => {
		console.log(item)
		if (plus.runtime.isApplicationExist({
				action: item.iosName
			})) {
			buttons.push(item)
		}
	})
	if (buttons.length) {
		plus.nativeUI.actionSheet({ //选择菜单
			title: this.$t('my.order.select'),
			cancel: this.$t('pages.predetermine.predetermine.Cancel'),
			buttons: buttons
		}, function(e) {
			let _map = buttons[e.index - 1]
			_this.openURL(_map, platform)
		})
	} else {
		uni.showToast({
			title: '请安装地图软件',
			icon: 'none'
		})
		return
	}
},
// 打开第三方应用
openURL(map, platform) {
	console.log(map, platform);
	let _defaultUrl = {
		android: {
			"amap": `amapuri://route/plan/?sid=&did=&dlat=${this.latitude}&dlon=${this.longitude}&dname=${this.shopAddress}&dev=0&t=0`,
			'baidumap': `baidumap://map/direction?origin=${this.latitude},${this.longitude}&destination=name:${this.shopAddress}|latlng:${this.latitude},${this.longitude}&coord_type=wgs84&mode=driving&src=andr.baidu.openAPIdemo"`,
			'googlemap': `geo: + ${this.latitude} + ',' + ${this.longitude} + '?q=' + encodeURIComponent(${this.shopAddress})`
		},
		ios: {
			"amap": `iosamap://path?sourceApplication=fuxishan_uni_client&dlat=${this.latitude}&dlon=${this.longitude}&dname=${this.shopAddress}&dev=0&t=0`,
			'baidumap': `baidumap://map/direction?origin=${this.latitude},${this.longitude}&destination=name:${this.shopAddress}|latlng:${this.latitude},${this.longitude}&mode=driving&src=ios.baidu.openAPIdemo`,
			'googlemap': `comgooglemaps://?q=${this.shopAddress}`,
			'applemap': `maps://?q=${this.shopAddress}&sll=${this.latitude}+ ',' + ${this.longitude}&z=10&t=s`
		}
	}
	let newurl = encodeURI(_defaultUrl[platform][map.name]);
	plus.runtime.openURL(newurl, function(res) {
		uni.showModal({
			content: res.message
		})
	}, map.androidName ? map.androidName : '');
},

重点

要是需要打开谷歌地图的话, 需要在manifest.json中配置应用访问白名单

uniapp为了方便开发者调用一些常用的第三方应用,云端打包时默认已经一部分白名单但不包含谷歌地图,所以需要单独添加一下

相关推荐
2501_915918418 分钟前
iOS 应用如何防止破解?从逆向链路还原攻击者视角,构建完整的反破解工程实践体系
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_9160074723 分钟前
iOS 应用上架流程的工程化拆解 从签名体系到提交审核的全过程管控
android·ios·小程序·https·uni-app·iphone·webview
一殊酒29 分钟前
【前端开发】Uniapp:Android/IOS云打包
android·ios·uni-app
yqcoder29 分钟前
uni-app 之 uni.showLoading
uni-app
2501_9159184129 分钟前
构建可靠的 iOS 日志导出体系,从真机日志到系统行为的多工具协同实践
android·ios·小程序·https·uni-app·iphone·webview
不知名的前端专家33 分钟前
uniapp 安卓原生Excel读写插件 支持U盘读写、数据库读写、读写监听进度等功能
android·uni-app·excel
yqcoder37 分钟前
uni-app 之 uni.showModal
前端·javascript·uni-app
2501_9159090644 分钟前
没有 Mac 怎么上架 iOS 应用 跨平台团队的可行交付方案分析
android·macos·ios·小程序·uni-app·iphone·webview
2501_9160074712 小时前
TCP 抓包分析实战,从三次握手到自定义协议解析的完整方法
网络协议·tcp/ip·ios·小程序·uni-app·php·iphone
2501_9151063221 小时前
H5 混合应用加密实践,从明文资源到安全 IPA 的多层防护体系
android·安全·ios·小程序·uni-app·iphone·webview