2016-11-01 6 views
0

アンドロイド携帯電話にその場所の使用許可を依頼しています。拒否または許可のダイアログボックスが表示されますが、これは問題ありません。 問題は、その応答をどのように捕らえるのか分かりません。次のように私のコードは次のとおりです。コールバックとして働くonRequestPermissionsResultを使用する方法についてのドキュメントは、私が推測する、nativescript-android:「実行時にロケーションの権限をリクエストする」というコールバック

var location_permissions = [ 
     (android as any).Manifest.permission.ACCESS_COARSE_LOCATION, 
     (android as any).Manifest.permission.ACCESS_FINE_LOCATION 
    ]; 

(android.support.v4.app.ActivityCompat as any).requestPermissions( 
    app.android.foregroundActivity, 
    location_permissions, 
    "PERMISSION_LOCATION_REQUEST_CODE" 
); 

// var grantResults = []; 

// (app.android.foregroundActivity as any).onRequestPermissionsResult(
//  app.android.foregroundActivity, 
//  "PERMISSION_LOCATION_REQUEST_CODE", 
//  location_permissions, 
//  grantResults 
//); 

ありますか? (https://developer.android.com/training/permissions/requesting.html)私はそこに書きましたが、どのようにコアラティブに実装するべきかは不明です。これはtypescriptですとangular2で書かれているので、私は私が.thenで応答を捕まえることができると思ったが、それはエラーがスローされます:cannot read property then of undefined

+0

こんにちはStarwave、NativeScriptには、このような機能を提供する 'nativescritp-geolocation'という外部プラグインがあります。さらにプラグインを使うと、 'enableLocationRequest(true);' - https://github.com/NativeScript/nativescript-geolocation/blob/master/source/location-monitor.dという1つのメソッドを呼び出すことで、必要なアクセス権を取得することができます。 ts#L39 –

+0

私はすでにそれを使用していますが、上記のアンドロイドプラットフォームの宣言でこれを行う方法を知っておく必要があるので、カレンダーやファイルなどの他のアクセス許可をバインドすることもできます... – Starwave

+0

'nativescript-permissions'は、より多くのパーミッションをリクエストしたり、プラグインコードを使用したりするためのものです。 - https://github.com/NathanaelA/nativescript-permissions/blob/master/permissions.android.js#L118-L179 –

答えて

0

は、そのプラグインのコードをチェックして、私が欲しかったもの、それから得た:

var location_permissions = [ 
     (android as any).Manifest.permission.ACCESS_FINE_LOCATION // no need to define "ACCESS_COARSE_LOCATION", because "ACCESS_FINE_LOCATION" includes permissions to NETWORK_PROVIDER and GPS_PROVIDER 
    ]; 

var activityRequestPermissionsHandler_location = function (data) { 
    //console.log('requestCode: ' + data.requestCode + ' permissions: ' + data.permissions + ' grantResults: ' + data.grantResults); 
    if (data.requestCode === 1) { 
     if (data.grantResults.length > 0 && data.grantResults[0] == android.content.pm.PackageManager.PERMISSION_GRANTED) { 
      console.log("permission granted!!!"); 
     } 
     else { 
      console.log("permission not granted!!!"); 
     } 
    } 
    app.android.off(app.AndroidApplication.activityRequestPermissionsEvent, activityRequestPermissionsHandler_location); 
}; 
app.android.on(app.AndroidApplication.activityRequestPermissionsEvent, activityRequestPermissionsHandler_location); 

(android.support.v4.app.ActivityCompat as any).requestPermissions( 
    app.android.foregroundActivity, 
    location_permissions, 
    1 
); 
関連する問題