2009-05-09 16 views

ответ

413

Лучший способ кажется следующее:

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, см. http://github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/activity/main/MainActivity .java для деталей. – Marcus

+3

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

+24

Я бы посоветовал объявить 'alert' для всего действия, чтобы вы могли его отклонить в onDestroy, чтобы избежать утечки памяти (' if (alert! = Null) {alert.dismiss();} ') – Cameron

6

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

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

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

32

Да Настройки 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! = Null &&! Provider.isEmpty())' – Pawan

119

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

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

GPS Enabled или нет: - Добавить ниже разрешение линии пользователя в 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(); 
    } 
} 

Вывод будет похож

enter image description here

enter image description here

+1

Ничего не происходит, когда я пытаюсь выполнить вашу функцию. У меня нет ошибок, когда я тестирую его. – Erik

+0

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

+3

не проблема @ Эрик Эдгрен вы получите решение, так что я счастлив ENjoy ... !! – 2012-04-02 08:28:32

28

Вот шаги:

Шаг 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: Постоянно выполняйте ваши услуги для контроля соединения.

+2

Это первый рабочий способ проверить состояние GPS для меня. Большое спасибо! – Patryk

+6

, шаг 4, дает мне «истину» каждый раз, даже * GPS * не включен ... –

+5

Сообщает, что GPS включен, даже когда он выключен. –

9

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

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

Как включить его, если он отключен –

2

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

2

Этот фрагмент кода проверяет статус GPS

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

`