Як дізнатись, чи ввімкнено 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(); })
Cameron

Так що, якщо я працюю на економії батареї, це все ще буде працювати?
Прахар Мохан Срівастава

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

3
немає проблем @ Ерік Едгрен, ви отримаєте рішення, так що я радий насолоджуйтесь ... !!

@ 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з декількома намірами. Коли наміри повертаються до вашої діяльності, ви перевіряєте RequestCode, щоб побачити, який намір повертається, і відповісти відповідно.
Farray

2
providerМоже бути символом нового рядка. Мені довелося змінити чек на(provider != null && !provider.isEmpty())
Pawan

Оскільки постачальник може бути "", розгляньте можливість використання режиму int = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Якщо режим = 0 GPS вимкнено
Левон Петросян

31

Ось такі кроки:

Крок 1. Створіть служби, які працюють у фоновому режимі.

Крок 2: Вам також потрібен наступний дозвіл у файлі Manifest:

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буде викликано дзвінок ; якщо користувач onProviderEnabledвключить GPS, буде викликано.


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.