【问题标题】: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-diagnosticrequestLocationAuthorization() 自己处理位置许可请求。

    例如,通过在请求权限之前设置一个标志并在收到权限响应后立即清除它,恢复事件处理程序可以知道它是否因为权限请求而被恢复:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 2016-06-29
      • 1970-01-01
      • 2016-12-27
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多