На устройстве с поддержкой Android Cupcake (1,5), как проверить и активировать GPS?Как узнать, включен ли GPS-устройство Android?
ответ
Лучший способ кажется следующее:
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();
}
Главным образом речь идет о стрельбе из намерения увидеть конфигурацию GPS, см. http://github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/activity/main/MainActivity .java для деталей. – Marcus
Хороший фрагмент кода. Я удалил @SuppressWarnings и не получил никаких предупреждений ... возможно, они не нужны? – span
Я бы посоветовал объявить 'alert' для всего действия, чтобы вы могли его отклонить в onDestroy, чтобы избежать утечки памяти (' if (alert! = Null) {alert.dismiss();} ') – Cameron
GPS будет использоваться, если пользователь разрешил использовать его в настройках.
Вы не можете явно переключать это действие больше, но вам не нужно - это настройка конфиденциальности, поэтому вы не хотите ее настраивать. Если пользователь в порядке с приложениями, получающими точные координаты, он будет включен. Тогда API-интерфейс менеджера местоположений будет использовать GPS, если это возможно.
Если ваше приложение действительно не полезно без GPS, и оно выключено, вы можете открыть приложение настроек на правом экране, используя намерение, чтобы пользователь мог его включить.
Да Настройки 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
}
}
}
Вот один из способов сделать это, и я надеюсь, что это помогает. Сообщите мне, если я делаю что-то неправильно.
привет, у меня есть аналогичная проблема ... можете ли вы вкратце объяснить, что такое «REQUEST_CODE» и для чего он предназначен? – poeschlorn
@poeschlorn Анна разместила ссылку, подробно описанную ниже. Проще говоря, RequestCode позволяет использовать 'startActivityForResult' с несколькими намерениями. Когда намерения возвращаются к вашей активности, вы проверяете RequestCode, чтобы увидеть, какое намерение возвращается и соответственно реагировать. – Farray
«Поставщик» может быть пустой строкой. Мне пришлось изменить чек на '(provider! = Null &&! Provider.isEmpty())' – Pawan
В андроиде мы можем легко проверить, включен ли 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();
}
}
Вывод будет похож
Ничего не происходит, когда я пытаюсь выполнить вашу функцию. У меня нет ошибок, когда я тестирую его. – Erik
Я заработал! :) Большое спасибо, но я не могу проголосовать до тех пор, пока вы не отредактировали свой ответ:/ – Erik
не проблема @ Эрик Эдгрен вы получите решение, так что я счастлив ENjoy ... !! – 2012-04-02 08:28:32
Вот шаги:
Шаг 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: Постоянно выполняйте ваши услуги для контроля соединения.
Это первый рабочий способ проверить состояние GPS для меня. Большое спасибо! – Patryk
, шаг 4, дает мне «истину» каждый раз, даже * GPS * не включен ... –
Сообщает, что GPS включен, даже когда он выключен. –
Да, вы можете проверить ниже код:
public boolean isGPSEnabled (Context mContext){
LocationManager locationManager = (LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Как включить его, если он отключен –
В вашем LocationListener
, осуществлять onProviderEnabled
и onProviderDisabled
обработчиков событий. Когда вы вызываете requestLocationUpdates(...)
, если GPS отключен на телефоне, будет вызван onProviderDisabled
; если пользователь включит GPS, будет вызван onProviderEnabled
.
Этот фрагмент кода проверяет статус GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
buildAlertMessageNoGps();
}
`
, что собирается принять ответ? :) – dit