2017-05-05 60 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();