Разрешение флаттера - PullRequest
       14

Разрешение флаттера

0 голосов
/ 24 февраля 2019

Я пытаюсь спросить ACCESS_FINE_LOCATION в XIAOMI REDMI NOTE 4, работающей под управлением Android 6.0.

Я пытался использовать геокодер и местоположение.Работает на iphone и samsung на Android 8 (не знаю названия).

TL; DR: разрешение никогда не спрашивается и не отображается в настройках приложения и Xiaomi.

Здесьмой код:

Android

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import java.util.Arrays;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

private static final String CHANNEL_GPS = "runtimepermission/access_fine_location";
private PermissionCallback getAccessFineLocationPermissionCallback;
private boolean rationaleJustShown = false;
private static final int GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID = 1234;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);

    new MethodChannel(getFlutterView(), CHANNEL_GPS).setMethodCallHandler(
            new MethodChannel.MethodCallHandler() {
                @Override
                public void onMethodCall(MethodCall call, final MethodChannel.Result result) {
                    getAccessFineLocationPermissionCallback = new PermissionCallback() {
                        @Override
                        public void granted() {
                            rationaleJustShown = false;
                            result.success(0);
                        }

                        @Override
                        public void denied() {
                            rationaleJustShown = false;
                            result.success(1);
                        }
                    };
                    if (call.method.equals("hasPermission")) {
                        askPermission();
                    }
                }
            });
}

private void askPermission() {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
            GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID);
}


@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    System.out.println("requestCode:" + requestCode);
    for (int grantResult : grantResults) {
        System.out.println("grandResult[i]:" + grantResult);
    }

    switch (requestCode) {
        case GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID:
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getAccessFineLocationPermissionCallback.granted();
            } else {
                getAccessFineLocationPermissionCallback.denied();
            }
            return;
    }
}

public interface PermissionCallback {
    void granted();

    void denied();
}

Флаттер:

static const _methodChannel = const MethodChannel('runtimepermission/access_fine_location');
  Future<PermissionState> canGetLocation() async {
    try {
      final int result = await _methodChannel.invokeMethod('hasPermission');
      return new Future.value(PermissionState.values.elementAt(result));
    } on PlatformException catch (e) {
      print('Exception ' + e.toString());
    }
    return new Future.value(PermissionState.DENIED);
  }

Выдает исключение PlatformException с сообщением об ошибке: пользователь явно запретил использование служб определения местоположения дляэто приложение или службы определения местоположения в настоящее время отключены в настройках.

На телефоне всплывающее окно никогда не отображается, и разрешение не отображается в настройках> установленное приложение> мое приложение> разрешения

Можетты поможешь мне ?Спасибо.

Ответы [ 2 ]

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

Проблема с кешем.Если вы испытываете странные проблемы, как у меня, очистите кеш:)

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

Была такая же проблема.Я смог решить мою проблему, включив приложение для автоматической инициализации и не оптимизировать батарею.Похоже, что это проблема, связанная только с xiaomi, без каких-либо плагинов или решения для разработчиков.Я рекомендую сделать экран, обучающий пользователя, что делать, и перенаправить его

...