2017-05-05 99 views
0

我有科尔多瓦应用程序有地图。当用户来到地图状态时,它会询问位置权限。许多用户不想给那里的位置,所以他们拒绝位置权限,如果第二次出现权限窗口,它有一个复选框,以防止显示它。所以现在的问题是,如果用户按下不再显示并且拒绝,权限总是在后台询问,并且拒绝它也触发onPause onResume事件。在我的onResume事件中,我有很多检查,不应该在权限触发onResume时触发。科尔多瓦位置权限触发onResume每次

如何停止onResume权限的触发器,或者我可以检查什么时候有权限触发,然后我不开火onResume?

回答

1

Android运行时权限对话框通过创建并切换到新活动来显示。发生这种情况时,Cordova活动(即您的应用程序)将置于后台(触发onPause事件)。当用户做出选择时,权限活动被销毁,您的应用活动恢复到前台(触发onResume事件)。

因此,您无法阻止onResume事件被触发,因为它正在对前景活动的更改进行正确调用。

你可以做的是更好地处理这种情况。一种方法是使用requestLocationAuthorization()cordova-plugin-diagnostic自己处理请求位置权限。

例如,通过设置一个标志之前请求许可和接收权限响应后即刻清除它,恢复的事件处理程序可以知道它是否正在因为权限要求的简历:

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();