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

相关推荐
游戏开发爱好者818 小时前
系统状态:专为iPhone和iPad设计的实时系统性能监控工具全面介绍
android·ios·小程序·uni-app·iphone·webview·ipad
2501_9159090620 小时前
全面解析iOS应用上架到App Store的完整流程与关键注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106321 天前
iOS 证书类型及作用说明 账号证书与签名配置的完整解读
android·ios·小程序·https·uni-app·iphone·webview
2501_916008892 天前
移动安全之 APP 加固,保障移动应用安全的重要手段
安全·macos·ios·小程序·uni-app·iphone·xcode
2501_915106322 天前
Python爬虫从零开始:七天掌握HTTP协议、数据解析与反爬策略
android·ios·小程序·https·uni-app·iphone·webview
90后的晨仔2 天前
uni-app 项目目录结构全解:每个文件、每个文件夹的作用与配置详解
vue.js·uni-app
爱看老照片2 天前
关于uniapp中单位rpx的注意点
uni-app·rpx
郑州光合科技余经理2 天前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
2501_915921433 天前
详细解析,iOS 应用上架 App Store 的完整流程与指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915918413 天前
Xcode调试iOS应用内存管理与优化,识别泄漏与性能监控指南
android·ios·小程序·uni-app·cocoa·iphone·xcode