外部唤醒Android本地APP URI为空问题

博客主要讨论外部唤醒APP的两种情况,着重分析APP已启动时唤起,uri为空的问题。因项目主ACTIVITY为SingleTask,导致intent对象无法获取值,给出解决方案,即使用onNewIntent()方法设置新的intent值,以解决取值问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

外部唤醒APP主要为两种情况

1.APP未被启动,2.APP已被启动

第一种情况下,APP未被启动的情况下,网上有很多关于JS唤起APP的代码,这里不多说,主要说说第二种情况下,APP被唤起时,而不是启动时,uri为空的主要问题。

因为一般项目的主ACTIVITY都为SingleTask所以intent对象是获取不到值的。

解决方案为:onNewIntent(){
setIntent(inte)
}
这样每次的intent都为新值,即可解决intent无法获取值的问题。

### 实现uni-app中调用高德地图API进行导航 为了在uni-app项目里实现通过高德地图API来完成导航操作,可以采用如下方式: #### 将高德地图API加载过程转化为Promise形式以便于管理异步流程[^2] ```javascript export default function MapLoader() { return new Promise((resolve, reject) => { if (window.AMap) { resolve(window.AMap); } else { const script = document.createElement('script'); script.type = "text/javascript"; script.async = true; script.src = `https://webapi.amap.com/maps?v=1.4.15&key=${yourKey}&callback=initAMap`; script.onerror = reject; document.head.appendChild(script); } window.initAMap = () => { resolve(window.AMap); }; }); } ``` 这里需要注意替换`yourKey`为实际申请得到的高德开放平台密钥。 #### 创建用于启动导航的方法 定义一个名为`startNavigation`的方法,在此方法内部先利用上述封装好的`MapLoader()`函数等待高德地图库加载完毕后再执行具体的导航逻辑。对于发起路径规划请求而言,可借助高德提供的Web服务API接口发送HTTP GET请求获取路线数据并解析返回的结果集以适配到应用界面展示给用户;或者是直接构造URL Scheme链接字符串让手机端自动识别打开对应的地图客户端应用程序来进行实时导航指引[^1]。 ```javascript async function startNavigation(destinationLocation) { try { await MapLoader(); let destLnglat = destinationLocation.split(","); // 假设目的地坐标是以逗号分隔经度纬度的形式传入 // 构造url scheme 方式唤起app内嵌浏览器或外部安装的应用程序 const urlScheme = `amapuri://route/plan/?dlat=${destLnglat[1]}&dlon=${destLnglat[0]}&dev=0&t=0`; plus.runtime.openURL(urlScheme); } catch(error){ console.error("Failed to load map or navigate:", error.message); } } ``` 这段代码展示了如何基于已知的目的地理位置信息(经纬度)构建适用于iOS和Android系统的通用URL Scheme格式化串,并尝试通过plus API中的openURL方法触发设备上的默认处理机制去响应该类型的URI模式从而达到开启指定目标地点导航的效果。 考虑到不同操作系统间可能存在差异化的支持程度以及某些情况下可能未预先装有匹配版本的目标App问题,建议开发者们还需做好充分测试工作确保兼容性和用户体验的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值