Запрос разрешения на получение местоположения - PullRequest
0 голосов
/ 27 мая 2018

Я следую за ответом на этот вопрос, чтобы решить мою проблему, но проблема заключается в том, что в результате onActivity всегда идет оператор else, и диалоговое окно, в котором пользователь может разрешить разрешение, не отображается.

Как запросить разрешение для местоположенияво время выполнения на Android 6

public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;


    public boolean checkLocationPermission() {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {

                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.
                new AlertDialog.Builder(this)
                        .setTitle(R.string.title_location_permission)
                        .setMessage(R.string.text_location_permission)
                        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                //Prompt the user once explanation has been shown
                                ActivityCompat.requestPermissions(SalesPersonActivity.this,
                                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                                        MY_PERMISSIONS_REQUEST_LOCATION);
                            }
                        })
                        .create()
                        .show();


            } else {
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_LOCATION);
            }
            return false;
        } else {
            return true;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_LOCATION: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay! Do the
                    // location-related task you need to do.
                    if (ContextCompat.checkSelfPermission(this,
                            Manifest.permission.ACCESS_FINE_LOCATION)
                            == PackageManager.PERMISSION_GRANTED) {

                        //Request location updates:
                            getLocation();
                    }

                } else {

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                    checkLocationPermission();
                }
                return;
            }

        }

1 Ответ

0 голосов
/ 27 мая 2018

Только что ответили до 5 минут ссылка

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

У вас есть2 способа

  1. Следуйте по правильному пути, чтобы получить разрешение.Я публикую свой фрагмент кода, скопируйте этот код в свой базовый класс активности.
  2. Или вы используете RxPermissions .Если вы новичок в Android.

Вот мой фрагмент кода.

String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};

        getBulkPermissions(permissions, new RequestPermissionAction() {
            @Override
            public void permissionDenied() {
                // TODO: 5/27/2018 handle permission deny 
            }

            @Override
            public void permissionGranted() {
                // TODO: 5/27/2018 you code do further operations 
            }
        });

Может ли он быть проще?

Теперь вы положите этот код BaseКласс деятельности и использовать в любом месте, где вам нужно.Или укажите текущий класс, если он вам не нужен, в любом другом месте.

RequestPermissionAction onPermissionCallBack;
private final static int REQUEST_BULK_PERMISSION = 3006;

private boolean checkBulkPermissions(String[] permissions) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        for (String permission : permissions) {
            if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    } else {
        return true;
    }
}

public void getBulkPermissions(String[] permissions, RequestPermissionAction onPermissionCallBack) {
    this.onPermissionCallBack = onPermissionCallBack;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!checkBulkPermissions(permissions)) {
            requestPermissions(permissions, REQUEST_BULK_PERMISSION);
            return;
        }
    }
    if (onPermissionCallBack != null)
        onPermissionCallBack.permissionGranted();
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        if (onPermissionCallBack != null)
            onPermissionCallBack.permissionGranted();
    } else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) {
        if (onPermissionCallBack != null)
            onPermissionCallBack.permissionDenied();
    }
}

public interface RequestPermissionAction {
    void permissionDenied();
    void permissionGranted();
}

Также проверьте, требуется ли вам разрешение ACCESS_COURSE_LOCATION.

...