Как узнать, включен ли GPS на устройстве Android


Ответы:


456

Лучший способ выглядит следующим образом:

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}

1
В основном речь идет о запуске намерения просмотреть конфигурацию GPS, подробности см. На github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… .
Маркус

3
Хороший фрагмент кода. Я удалил @SuppressWarnings и не получаю никаких предупреждений ... возможно, они не нужны?
продолжительность

30
Я бы посоветовал декларировать alertвсю активность, чтобы вы могли отклонить ее в onDestroy, чтобы избежать утечки памяти ( if(alert != null) { alert.dismiss(); })
Кэмерон

Так что, если я нахожусь на Экономии батареи, это все еще будет работать?
Прахар Мохан Шривастава

3
@PrakharMohanSrivastava, если настройки вашего местоположения находятся в режиме энергосбережения, это вернет ложь, однако LocationManager.NETWORK_PROVIDERвернет истину
Тим

129

В Android мы можем легко проверить, включен ли GPS на устройстве или нет с помощью LocationManager.

Вот простая программа для проверки.

GPS включен или нет: - Добавьте приведенную ниже строку с правами доступа пользователя в AndroidManifest.xml, чтобы получить доступ к местоположению

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

Ваш файл классов Java должен быть

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

Вывод будет выглядеть как

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

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


1
Ничего не происходит, когда я пробую твою функцию. Я не получил никаких ошибок, когда я проверяю это все же.
Airikr

Я получил это работает! :) Большое спасибо, но я не могу голосовать, пока вы не отредактируете свой ответ: /
Airikr

3
нет проблем @Erik Edgren вы получите решение, так что я счастлив, наслаждайтесь ... !!

@ user647826: Отлично! Работает красиво. Вы спасли мою ночь
Адди

1
Совет: объявите alertвсе действия, чтобы их можно было отклонить, onDestroy()чтобы избежать утечки памяти ( if(alert != null) { alert.dismiss(); })
naXa

38

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

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

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

Если пользователь хочет включить GPS, вы можете показать экран настроек таким образом.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

И в вашем onActivityResult вы можете увидеть, включил ли пользователь его или нет

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

Это один из способов сделать это, и я надеюсь, что это поможет. Дайте мне знать, если я делаю что-то не так.


2
привет, у меня похожая проблема ... не могли бы вы вкратце объяснить, что такое "REQUEST_CODE" и для чего он нужен?
poeschlorn

2
@poeschlorn Анна разместила ссылку на подробное описание ниже. Проще говоря, RequestCode позволяет использовать startActivityForResultс несколькими намерениями. Когда намерения возвращаются к вашей активности, вы проверяете код запроса, чтобы увидеть, какое намерение возвращается, и отвечаете соответствующим образом.
Farray

2
providerМожет быть пустой строкой. Я должен был изменить чек на(provider != null && !provider.isEmpty())
Паван

Поскольку провайдер может быть "", рассмотрите возможность использования int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Если режим = 0 GPS отключен
Левон Петросян

31

Вот шаги:

Шаг 1. Создайте службы, работающие в фоновом режиме.

Шаг 2: Вам также необходимо следующее разрешение в файле манифеста:

android.permission.ACCESS_FINE_LOCATION

Шаг 3: Написать код:

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

Шаг 4: Или просто вы можете проверить, используя:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

Шаг 5: Постоянно запускайте свои сервисы для мониторинга соединения.


5
Это говорит о том, что GPS включен, даже когда он выключен.
Иван V

15

Да, вы можете проверить ниже код:

public boolean isGPSEnabled (Context mContext){
    LocationManager locationManager = (LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

9

Этот метод будет использовать сервис LocationManager .

Ссылка на источник

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};

6

GPS будет использоваться, если пользователь разрешил использовать его в своих настройках.

Вы не можете явно включить это больше, но вам не нужно - это действительно настройка конфиденциальности, так что вы не хотите ее настраивать. Если пользователь в порядке с приложениями, получающими точные координаты, он будет включен. Тогда API менеджера местоположений будет использовать GPS, если это возможно.

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


6

Этот кусок кода проверяет статус GPS

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

`


3

В вашем LocationListener, реализуйте onProviderEnabledи onProviderDisabledобработчики событий. При звонке requestLocationUpdates(...), если GPS отключен на телефоне, onProviderDisabledбудет вызываться; если пользователь включает GPS, onProviderEnabledбудет вызван.


2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.