【问题标题】:Cordova location permission triggers onResume every timeCordova 位置权限每次都会触发 onResume
【发布时间】:2017-10-03 19:53:01
【问题描述】:
我有带有地图的科尔多瓦应用程序。当用户进入地图状态时,它会询问位置权限。很多用户不想在那里提供位置,所以他们拒绝位置权限,如果权限窗口第二次出现,它有一个复选框来阻止显示它。所以现在的问题是,如果用户按下不再显示并拒绝,则权限总是在后台询问并拒绝它也会触发 onPause onResume 事件。在我的 onResume 事件中,我有很多检查不应在每次权限触发 onResume 时触发。
如何在权限上停止 onResume 触发器,或者我可以在有权限触发器时进行一些检查然后我不触发 onResume?
【问题讨论】:
标签:
android
cordova
angular
permissions
angular-google-maps
【解决方案1】:
Android 运行时权限对话框通过创建并切换到新活动来显示。发生这种情况时,Cordova 活动(即您的应用程序)被置于后台(触发 onPause 事件)。当用户做出选择时,权限活动被销毁,您的应用活动被恢复到前台(触发 onResume 事件)。
因此您无法阻止 onResume 事件被触发,因为它在前台活动更改时被正确调用。
你能做的就是更优雅地处理这种情况。一种方法是使用cordova-plugin-diagnostic 的requestLocationAuthorization() 自己处理位置许可请求。
例如,通过在请求权限之前设置一个标志并在收到权限响应后立即清除它,恢复事件处理程序可以知道它是否因为权限请求而被恢复:
var permissionRequestInProgress = false;
document.addEventListener("resume", function(){
if(permissionRequestInProgress){
console.log("Resumed due to permissions request");
}else{
console.log("Resumed due to another reason");
}
}, false);
function requestLocationPermission(){
permissionRequestInProgress = true;
cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
console.log("Permission is " + status);
setTimeout(function(){
permissionRequestInProgress = false;
}, 100);
});
}
requestLocationPermission();