【问题标题】:ERROR Error: java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATIONERROR 错误:java.lang.SecurityException:我的位置需要权限 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION
【发布时间】:2019-11-13 23:17:26
【问题描述】:

我想在我的项目中使用谷歌地图。为此:

首先我安装和配置插件>> tns plugin add nativescript-google-maps-sdk这个插件对我很好。

第二个我想在谷歌地图中显示我的当前位置,为此我安装>> tns plugin add nativescript-geolocation

AndroidMainfest.xml添加

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<supports-screens />
<uses-sdk />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<application>
.......
</application>
</manifest>

在ts组件中

onMapReady(event) {
    this.mapView = event.object;
    this.ws.mobile_base_pharmacyGetAll().subscribe(
        items => {
            console.log(items)
            this.items = items;
            if (items !== undefined || items !== undefined) {
                for (let i = 0; i < this.items.length; i++) {            
                    var marker = new Marker();
                    marker.position = Position.positionFromLatLng(this.items[i].latitude, this.items[i].longitude);
                    marker.title = this.items[i].name;
                    marker.snippet = this.items[i].address1;
                    marker.userData = { index: 1 };
                    this.mapView.addMarker(marker);   
                    this.mapView.myLocationEnabled = true;   
               }
            }
        },
        err => console.error('err', err),
        () => console.log('error')
    );
}

Android 5.1.1 中的这段代码运行良好。在 Android 版本 7 及更高版本中不起作用。错误:

JS: ERROR 错误: java.lang.SecurityException: 我的位置需要 权限 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION JS:
com.google.maps.api.android.lib6.impl.bg.c(:com.google.android.gms.dynamite_mapsdynamite@17785050@17.7.85 (040406-253824076):545) JS:
com.google.android.gms.maps.internal.m.a(:com.google.android.gms.dynamite_mapsdynamite@17785050@17.7.85 (040406-253824076):361) JS:
hp.onTransact(:com.google.android.gms.dynamite_mapsdynamite@17785050@17.7.85 (040406-253824076):4) JS:
android.os.Binder.transact(Binder.java:499) JS:
com.google.android.gms.internal.maps.zza.transactAndReadExceptionReturnVoid(未知 来源)JS:
com.google.android.gms.maps.internal.zzg.setMyLocationEnabled(未知 来源)JS:
com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(未知 来源) JS: com.tns.Runtime.callJSMethodNative(Native Method) JS: com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1203) JS:
com.tns.Runtime.callJSMethodImpl(Runtime.java:1083) JS:
com.tns.Runtime.callJSMethod(Runtime.java:1070)

你能建议我任何想法吗,什么是问题以及如何解决?我在谷歌找不到任何解决方案。

谢谢!

更新:

我改了,没改,有错误。

【问题讨论】:

  • 您是否在清单中添加了权限
  • 是的,我更新了我的帖子。谢谢
  • 您是否也为运行时权限添加了代码?
  • 不要对原生项目和 NativeScript 感到困惑,因为它是由 {N} CLI 自动生成的,所以你不应该使用平台文件夹编辑任何内容。我将其标记为重复,因为答案已包含在我对您之前帖子的回答中。演示应用清楚地展示了您应该如何获取权限的案例。

标签: android google-maps geolocation nativescript


【解决方案1】:

从 Android 6.0 开始,用户必须在运行时批准权限。在这里可以找到官方Google Developer documentation

处理运行时权限的一个有用的响应式库是:https://github.com/tbruyelle/RxPermissions

【讨论】:

    【解决方案2】:

    从 Android 6.0(API 级别 23)开始,用户可以随时撤销任何应用的权限,即使该应用的目标 API 级别较低。

    在您的 MainActivity 中添加此代码。

    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) ==
            PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
            PackageManager.PERMISSION_GRANTED) {
        googleMap.setMyLocationEnabled(true);
        googleMap.getUiSettings().setMyLocationButtonEnabled(true);
    } else {
        ActivityCompat.requestPermissions(this, new String[] {
          Manifest.permission.ACCESS_FINE_LOCATION, 
          Manifest.permission.ACCESS_COARSE_LOCATION }, 
          TAG_CODE_PERMISSION_LOCATION);
    }
    

    查看详情https://developer.android.com/training/permissions/requesting.html

    【讨论】:

    • 请您指定我在哪个文件中添加此代码?
    • 你可以在 onCreate 方法中添加你的 MainActivity
    • 请问您能在帖子中看到我的更新吗?
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多