错误错误:java.lang.SecurityException:我的位置需要权限ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION

时间:2019-07-03 09:39:00

标签: android google-maps geolocation nativescript

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

首先,我安装并配置插件>> tns plugin add nativescript-google-maps-sdk,该插件对我有用。

第二秒,我也要显示在Google地图中以及当前位置,为此我安装了>> 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:错误错误: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(本地方法)JS:   com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1203)JS:
  com.tns.Runtime.callJSMethodImpl(Runtime.java:1083)JS:
  com.tns.Runtime.callJSMethod(Runtime.java:1070)

请问我有什么建议,有什么问题以及如何解决?我在google中找不到任何解决方案。

谢谢!

更新:

我更改了它,但没有任何变化,存在错误。

enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

从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