Отображение Разрешить приложению доступ к местоположению устройства

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

Нравится это приложение

введите здесь описание изображения

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

введите здесь описание изображения

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

вот мой код

  public void showSettingsAlert() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(_activity);
        alertDialog.setTitle("GPS Settings");
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu ?");

        alertDialog.setPositiveButton("Settings",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(
                                Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        _activity.startActivity(intent);
                    }
                });

        alertDialog.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

        alertDialog.show();
    }

person asmgx    schedule 04.02.2017    source источник
comment
Самое простое решение stackoverflow.com/a/40462527/1677824   -  person Akhil    schedule 06.02.2017


Ответы (3)


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

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

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

    // 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.

} else {

    // No explanation needed, we can request the permission.

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant. The callback method gets the
    // result of the request.
}
}

Вот ссылка ссылка

person arjun    schedule 04.02.2017

Предоставление вашему приложению доступа к местоположению устройства (первый снимок экрана) — это не то же самое, что включение GPS (второй снимок экрана). На самом деле вам нужно и то, и другое: сначала проверьте, есть ли у вас разрешение, как предлагали другие ответы, затем проверьте, включен ли GPS, как вы уже делаете.

Если вы хотите включить GPS программно, вам нужно использовать «API настроек». Проверьте этот ответ о том, как это реализовать.

person Elias N    schedule 04.02.2017

Привет, это разрешение во время выполнения, просто перейдите по этой ссылке для ссылки нажмите здесь

также проверьте это нажмите здесь

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

Сделать это :

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);

Он покажет диалоговое окно, в котором пользователь будет выбирать, авторизовать ли он ваше приложение для использования местоположения или нет.

Затем получите ответ пользователя с помощью этой функции:

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

            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
        return;
        }
            // other 'case' lines to check for other
            // permissions this app might request
    }
}

Если пользователь примет его один раз, ваше приложение запомнит его, и вам больше не нужно будет отправлять это диалоговое окно. Обратите внимание, что пользователь может отключить его позже, если захочет. Затем, прежде чем запрашивать местоположение, вам нужно будет проверить, предоставлено ли разрешение:

public boolean checkLocationPermission()
{
    String permission = "android.permission.ACCESS_FINE_LOCATION";
    int res = this.checkCallingOrSelfPermission(permission);
    return (res == PackageManager.PERMISSION_GRANTED);
}
person Anil    schedule 04.02.2017
comment
Как только ссылка не работает, ваш ответ бесполезен! - person Charuක; 04.02.2017