如何从Google Home设备获取用户位置并实现指定Jovo框架示例
如何从Google Home获取用户位置并实现权限请求示例
我来帮你解决这两个问题,下面是具体的步骤和代码实现:
一、从Google Home设备获取用户位置的步骤
要获取用户的位置,核心是通过权限请求来获得用户授权,具体分为以下三步:
确定所需权限类型
Google Home提供两种位置权限选项,你可以根据需求选择:DEVICE_PRECISE_LOCATION:获取设备的精确地理位置(包含经纬度)DEVICE_COARSE_LOCATION:获取设备的大致位置(比如城市级别)
在Google Actions控制台配置权限
登录你的Google Actions项目控制台,按以下操作配置:- 进入
Build > Actions > 你的目标Action > 权限页面 - 添加你需要的位置权限,并填写清晰的权限说明(告诉用户为什么需要这个权限,提升授权率)
- 保存配置,确保权限生效
- 进入
在代码中发起权限请求并处理结果
当技能需要位置信息时,先检查是否已有授权,没有的话就向用户发起请求;授权后即可获取位置数据。
二、权限请求示例的代码实现
下面是基于Jovo框架的完整实现代码,对应你提到的示例逻辑:
const { App } = require('jovo-framework'); const { GoogleAssistant } = require('jovo-platform-googleassistant'); // 初始化Jovo应用 const app = new App(); app.use(new GoogleAssistant()); // 配置技能处理逻辑 app.setHandler({ // 技能启动时触发的意图 LAUNCH() { // 发起位置权限请求,第一个参数是权限说明,第二个是请求的权限列表 this.googleAction().askForPermission( '为了给你提供精准的附近服务推荐', ['DEVICE_PRECISE_LOCATION'] ); }, // Google Assistant内置的权限结果处理意图 ON_PERMISSION() { // 判断用户是否授予权限 if (this.googleAction().isPermissionGranted()) { // 获取位置数据 const location = this.googleAction().getDeviceLocation(); if (location) { // 提取位置信息并反馈给用户 const { latitude, longitude, city } = location; this.tell(`已获取到你的位置:${city},经纬度为${latitude}, ${longitude}`); } else { this.tell('抱歉,暂时无法获取你的位置信息'); } } else { // 用户拒绝权限时的反馈 this.tell('好的,那我无法为你提供位置相关的服务了'); } }, }); // 导出处理函数供Lambda使用 exports.handler = app.handler;
代码关键点说明:
LAUNCH意图:技能启动后直接调用askForPermission方法发起权限请求,明确告知用户权限用途,这是提高授权率的关键。ON_PERMISSION意图:这是Google Assistant专门用于处理权限请求结果的内置意图,无需额外配置。通过isPermissionGranted()判断授权状态,授权成功后用getDeviceLocation()获取包含经纬度、城市等信息的位置对象。- 测试注意事项:测试时确保你的Google Home设备(或测试用手机)已登录对应Google账号,且设备系统设置中允许位置访问。
内容的提问来源于stack exchange,提问作者Jayakumar Manian
相关产品推荐
相关产品推荐

