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

相关推荐
00后程序员张10 小时前
iOS 上架费用全解析 开发者账号、App 审核、工具使用与开心上架(Appuploader)免 Mac 成本优化指南
android·macos·ios·小程序·uni-app·cocoa·iphone
前端与小赵17 小时前
uni-app开发安卓app时控制屏幕常亮不息屏
android·gitee·uni-app
2501_9160088918 小时前
HTTPS 请求抓包,从原理到落地排查的工程化指南(Charles / tcpdump / Wireshark / Sniffmaster)
ios·小程序·https·uni-app·wireshark·iphone·tcpdump
xiaohe060119 小时前
🥳 Uni ECharts 2.1 发布:正式支持鸿蒙,零成本迁移、全平台兼容、跨端开发零负担!
vue.js·uni-app·echarts
2501_915909061 天前
WebView 调试工具全解析,解决“看不见的移动端问题”
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
App 怎么上架 iOS?从准备资料到开心上架(Appuploader)免 Mac 上传的完整实战流程指南
android·macos·ios·小程序·uni-app·iphone·webview
行走的陀螺仪1 天前
uni-app + Vue3 实现折叠文本(超出省略 + 展开收起)
前端·javascript·css·uni-app·vue3
小禾青青1 天前
uniapp安卓打包遇到报错:Uncaught SyntaxError: Invalid regular expression: /[\p{L}\p{N}]/
android·uni-app
环信即时通讯云1 天前
实现小程序 uniApp 输入框展示自定义表情包
小程序·uni-app
2501_915921432 天前
iOS 抓不到包怎么办?工程化排查与替代抓包方案(抓包/HTTPS/Charles代理/tcpdump)
android·ios·小程序·https·uni-app·iphone·tcpdump