ОШИБКА Ошибка: java.lang.SecurityException: мое местоположение требует разрешения ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION - PullRequest
0 голосов
/ 03 июля 2019

Я хочу использовать карты 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.ma (: 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 голосов
/ 03 июля 2019

Начиная с 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

0 голосов
/ 03 июля 2019

Начиная с Android 6.0, пользователь должен утверждать разрешения во время выполнения. Здесь вы можете найти официальную документацию Google для разработчиков

Полезная реактивная библиотека для обработки разрешений во время выполнения: https://github.com/tbruyelle/RxPermissions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...