android - Cordova位置权限每次都会触发onResume

标签 android cordova angular permissions angular-google-maps

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

如何在许可时停止 onResume 触发器,或者我是否可以在有许可触发器时进行一些检查然后我不触发 onResume?

最佳答案

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

所以你不能阻止 onResume 事件被触发,因为它在前台 Activity 发生变化时被正确调用。

你能做的是更优雅地处理这种情况。一种方法是使用 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();

关于android - Cordova位置权限每次都会触发onResume,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43803132/

相关文章:

提交后过渡期间jquery移动页面闪烁

android - 如何在 Android 中设置红色 TextView 的删除线

android - 如何调用其他类中的Runnable?

php - XAMPP、Eclipse、PHP、MySQL : Fatal error: Call to a member function fetch_array() on null

visual-studio - 在 Visual Studio 2015 ASP.NET Core 项目中保存时,Angular 2 .ts 文件未转换为 .js

angular - 如何取消订阅 Angular2 中的 Firebase 列表?

java - 如何从azure函数java中的POST请求中提取数据

java - 将字符串从另一个 SearchActivity 添加到 SQLite 数据库后更新 Fragment 内的 ListView

安卓。火力地堡 : Could not parse the Android Application module

javascript - 如何在 Cordova/ionic 中获取 deviceready 事件?