2017-05-05 11 views
0

지도가있는 코도바 앱이 있습니다. 사용자가지도 상태가되면 위치 권한을 요청합니다. 많은 사용자가 위치 정보를 제공하지 않으므로 위치 권한을 거부하고 두 번째로 표시되는 권한 창이 표시되지 않도록 확인란이 있습니다. 이제 문제는 사용자가 다시 표시하지 않고 거부하면 권한이 항상 백그라운드에서 묻고 onPause 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();