Проблема с разрешением местоположения для Android 6 и 7/8 - PullRequest
0 голосов
/ 03 декабря 2018

Когда я запускаю свое приложение на Android 7. Он возвращает эту ошибку.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ruslan.testmapagain, PID: 20482
    java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION
        at com.google.maps.api.android.lib6.impl.bf.c(:com.google.android.gms.dynamite_mapsdynamite@14574051@14.5.74 (040408-219897028):566)
        at com.google.android.gms.maps.internal.l.a(:com.google.android.gms.dynamite_mapsdynamite@14574051@14.5.74 (040408-219897028):361)
        at fu.onTransact(:com.google.android.gms.dynamite_mapsdynamite@14574051@14.5.74 (040408-219897028):4)
        at android.os.Binder.transact(Binder.java:499)
        at com.google.android.gms.internal.maps.zza.transactAndReadExceptionReturnVoid(Unknown Source)
        at com.google.android.gms.maps.internal.zzg.setMyLocationEnabled(Unknown Source)
        at com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(Unknown Source)
        at com.example.ruslan.testmapagain.MapsActivity.onMapReady(MapsActivity.kt:151)
        at com.google.android.gms.maps.zzak.zza(Unknown Source)
        at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source)
        at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source)
        at android.os.Binder.transact(Binder.java:499)
        at ft.b(:com.google.android.gms.dynamite_mapsdynamite@14574051@14.5.74 (040408-219897028):15)
        at com.google.android.gms.maps.internal.bg.a(:com.google.android.gms.dynamite_mapsdynamite@14574051@14.5.74 (040408-219897028):4)
        at com.google.maps.api.android.lib6.impl.bj.run(:com.google.android.gms.dynamite_mapsdynamite@14574051@14.5.74 (040408-219897028):4)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:883)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)

Но на Android 6 все работает хорошо.

Я попытался сделать это, как указано здесь: Android «gps требует ACCESS_FINE_LOCATION» ошибка

Но моя Android Studio выдает такие параметры в Манифесте.

В Манифесте права определяются следующим образом:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.LOCATION_HARDWARE"></uses-permission>

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Все опасное разрешение следует запрашивать во время выполнения, кроме упоминания их в манифесте.

В коде, где каждый вы пытаетесь получить доступ к Location, вам необходимо сначала проверитьесли вашему приложению был предоставлен доступ к местоположению, как показано ниже:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
    mMap.setMyLocationEnabled(true);
} else {
    // Show rationale and request permission.
}

Если вы случайно попросите пользователя предоставить разрешение на местоположение, вы получите обратный вызов здесь, если пользователи предоставят / не предоставят разрешение:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_LOCATION_REQUEST_CODE) {
      if (permissions.length == 1 &&
          permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION &&
          grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        mMap.setMyLocationEnabled(true);
    } else {
      // Permission was denied. Display an error message.
    }
}

Для получения дополнительной информации, пожалуйста, обратитесь здесь .

0 голосов
/ 03 декабря 2018

Вот как я наконец это сделал:

private fun setupPermissions() {

        val permission = ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)

        if (permission != PackageManager.PERMISSION_GRANTED) {
            makeRequest()
        }
    }

    private fun makeRequest() {
        ActivityCompat.requestPermissions(this,
                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                RECORD_REQUEST_CODE)
    }
0 голосов
/ 03 декабря 2018

Начиная с Android 6 вам нужно спрашивать разрешения для местоположения во время выполнения.Подробнее можно найти здесь Запрос разрешений во время выполнения

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