2017-05-05 9 views
0

私は地図を持っているコードバのアプリを持っています。ユーザーは状態をマップするようになると、その場所の許可を求めます。多くのユーザーは場所を指定したくないため、場所のアクセス許可を拒否し、2回目にアクセス許可のウィンドウが表示された場合は、表示されないようにするチェックボックスが表示されます。だから今問題は、ユーザーが再び表示して拒否しないと、そのアクセス許可は常にバックグラウンドで尋ね、それを拒否してonPause onResumeイベントをトリガーするということです。私のonResumeイベントでは、アクセス権がonResumeをトリガーするたびに解雇されるべきではないチェックがたくさんあります。コルディアの場所のアクセス許可は毎回onResumeをトリガーします

権限のonResumeトリガーを停止する方法、または許可トリガーがあるときに何らかのチェックをしてから、私はonResumeを起動しません。

答えて

1

Androidランタイム権限ダイアログは、新しいアクティビティを作成して切り替えることによって表示されます。この場合、Cordovaのアクティビティ(つまり、あなたのアプリ)はバックグラウンドに置かれます(onPauseイベントを引き起こします)。ユーザーが選択すると、アクセス許可アクティビティが破棄され、アプリケーションアクティビティがフォアグラウンドに再開されます(onResumeイベントがトリガされます)。

したがって、onResumeイベントがトリガされるのを止めることはできません。これは、フォアグラウンドアクティビティの変更時に正しく呼び出されるためです。

あなたができることは、状況をより優雅に処理することです。これを行う1つの方法は、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(); 
関連する問題