【问题标题】:nativescript-android: callback of "request location permissions on runtime"nativescript-android:“在运行时请求位置权限”的回调
【发布时间】:2016-11-01 09:01:12
【问题描述】:

所以我要求安卓手机获得使用其位置的权限。我得到了拒绝或允许的对话框,这很好。 问题是我不知道如何捕捉到它的响应。我的代码如下:

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
// );

我猜有一个关于使用onRequestPermissionsResult 的文档,它可以作为回调使用? (https://developer.android.com/training/permissions/requesting.html) 我在那里写的,但不确定它应该如何正确实现。由于这是用 typescript 用 angular2 编写的,我想我可以用.then 捕捉到响应,但它会引发错误:cannot read property then of undefined

【问题讨论】:

  • 嗨 Starwave,NativeScript 有一个名为 nativescritp-geolocation 的外部插件,它提供了这样的功能。此外,使用该插件,您还可以通过调用一种方法enableLocationRequest(true); - github.com/NativeScript/nativescript-geolocation/blob/master/… 获得所需的权限
  • 我已经在使用它了,但是我需要知道如何使用上面提到的 android 平台声明来做到这一点,所以我也可以绑定其他权限,比如日历或读取文件或其他...
  • 您可以使用nativescript-permissions 请求更多权限或使用插件代码作为示例 - github.com/NathanaelA/nativescript-permissions/blob/master/…
  • 我不喜欢使用只支持 1 个平台的插件。但是感谢您为我指明了正确的方向 - 我刚刚检查了地理位置代码以了解他们如何管理权限。在我的代码中手动做了同样的事情,它可以工作,稍后更新帖子。
  • 该插件仅适用于两个平台,因为您有 android 的示例 Nikolay 将链接到 android 部分作为您的示例

标签: android callback permissions location nativescript


【解决方案1】:

检查了插件代码并从中得到了我想要的:

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
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多