除了navigator.permissions.query
Permissions API 查询之外,还有其他方法可以检查geolocation
权限。
导致其仍在工作草案中,并且浏览器兼容性较低。
W3C权限参考: https://www.w3.org/TR/permissions/
一旦用户在本机权限弹出窗口上执行操作,问题就app resume
了,然后想检查用户正在action
采取的操作。
Hybrid Cordova App callback for location permission alert
平台:移动Android
注意:不想使用cordova diagnostic plugin
示例:
navigator.permissions.query({name:'geolocation'}).then(function(result) {
console.log('result : ', result);
});
答案 0 :(得分:2)
您可以直接使用navigator.geolocation
,而无需先征得许可。它将像navigator.permissions
一样自动引发询问位置提示。
navigator.geolocation.getCurrentPosition(
(i)=>console.log('success',i),
(i)=>console.log('failed',i)
)
Safari和Edge不支持 navigator.permissions
,但支持navigator.geolocation
,因此我认为只执行地理定位而不检查权限是安全的,因为它还会首先提高提示权限。
答案 1 :(得分:0)
我不这样认为。
此刻,navigator.permissions对象尚未定义-可能是出于有意将其在WebView中删除的,目的是不将Web权限与android权限混合使用。
选项1:
您可以尝试Cordova diagnostic plugin,特别是getLocationAuthorizationStatus
方法,该方法应以与Permissions API非常相似的方式返回权限状态。
请注意,我还没有尝试过该插件。
选项2:
通过请求位置来触发位置许可对话框。
当您收到包含PERMISSION_DENIED
恒定代码的PositionError时,就意味着用户拒绝了位置权限(仅在现在或在应用设置时)。
navigator.getCurrentPosition(
function(position) { /** won't be executed for such short timeout */ },
function(positionError) {
switch (positionError.code) {
// PERMISSION_DENIED
case 1:
console.log('Permission denied')
break
// POSITION_UNAVAILABLE
case 2:
console.log('Permission allowed, location disabled')
break
// TIMEOUT
case 3:
console.log('Permission allowed, timeout reached')
break
}
},
{timeout: 0}
)