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_915921432 小时前
详细解析,iOS 应用上架 App Store 的完整流程与指南
android·ios·小程序·https·uni-app·iphone·webview
波罗丁牌19 小时前
uni-app 实现视频聊天、屏幕分享,支持Android、HarmonyOS、iOS
android·uni-app·音视频
前端l21 小时前
uni‑app(Vue3+setup)开发微信小程序高频坑汇总
微信·uni-app
pan3035074791 天前
uniapp 不用发版也可以做到版本更新
uni-app
00后程序员张1 天前
使用Instruments工具深入分析iOS应用性能与启动时间优化
android·macos·ios·小程序·uni-app·cocoa·iphone
古韵1 天前
小程序上传进度条,还要自己监听 onProgressUpdate 吗?
前端·javascript·uni-app
不如摸鱼去2 天前
Wot UI 2.3.0 发布:二维码组件来了,Open Wot 与 wot-starter 同步更新
前端·ui·微信小程序·前端框架·uni-app
anyup2 天前
uni-app 没有根组件?仅需几行代码实现全局 Toast 和 Modal
前端·架构·uni-app
2501_916007472 天前
Python实现HTTPS爬虫的完整指南:使用requests、BeautifulSoup、Selenium和Scrapy
爬虫·python·ios·小程序·https·uni-app·iphone
AI_AGENT_DEV_AI2 天前
原生 APP(iOS / Android)的开发与上线
uni-app