Niezły fragment kodu. Usunąłem @SuppressWarnings i nie otrzymuję żadnych ostrzeżeń ... może są one niepotrzebne?
rozpiętość
30
Radzę zadeklarować alertcałą aktywność, abyś mógł ją zamknąć w onDestroy, aby uniknąć wycieku pamięci ( if(alert != null) { alert.dismiss(); })
Cameron
Co więc, jeśli korzystam z oszczędzania baterii, czy to nadal będzie działać?
Prakhar Mohan Srivastava
3
@PrakharMohanSrivastava, jeśli ustawienia lokalizacji są włączone w trybie oszczędzania energii, to zwróci fałsz, jednak LocationManager.NETWORK_PROVIDERzwróci prawdę
Tim
129
W Androidzie możemy łatwo sprawdzić, czy GPS jest włączony w urządzeniu, czy nie przy użyciu Menedżera lokalizacji.
Oto prosty program do sprawdzenia.
GPS włączony lub nie: - Dodaj poniższy wiersz uprawnień użytkownika w AndroidManifest.xml, aby uzyskać dostęp do lokalizacji
publicclassExampleAppextendsActivity{/** Called when the activity is first created. */protectedvoid 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();}}privatevoid showGPSDisabledAlertToUser(){AlertDialog.Builder alertDialogBuilder =newAlertDialog.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",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int id){Intent callGPSSettingIntent =newIntent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);}});
alertDialogBuilder.setNegativeButton("Cancel",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int id){
dialog.cancel();}});AlertDialog alert = alertDialogBuilder.create();
alert.show();}}
Nic nie dzieje się, gdy wypróbuję twoją funkcję. Jednak nie otrzymałem żadnych błędów podczas testowania.
Airikr
Mam to działa! :) Wielkie dzięki, ale nie mogę głosować, dopóki nie
zredagujesz
3
nie ma problemu @Erik Edgren masz rozwiązanie więc jestem szczęśliwy Ciesz się ... !!
@ user647826: Doskonale! Działa ładnie. Uratowałeś mi noc
Addi
1
Porada: zadeklaruj alertcałą aktywność, abyś mógł ją zamknąć, onDestroy()aby uniknąć wycieku pamięci ( if(alert != null) { alert.dismiss(); })
naXa
38
tak, ustawień GPS nie można już zmienić programowo, ponieważ są to ustawienia prywatności i musimy sprawdzić, czy są włączone w programie, czy nie, i obsłużyć je, jeśli nie są włączone. możesz powiadomić użytkownika, że GPS jest wyłączony i użyć czegoś takiego, aby wyświetlić użytkownikowi ekran ustawień, jeśli chcesz.
Sprawdź, czy dostawcy lokalizacji są dostępni
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}
Jeśli użytkownik chce włączyć GPS, może wyświetlić ekran ustawień w ten sposób.
W swoim onActivityResult możesz sprawdzić, czy użytkownik ją włączył
protectedvoid 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}}}
To jeden ze sposobów, aby to zrobić i mam nadzieję, że to pomoże. Daj mi znać, jeśli robię coś źle.
cześć, mam podobny problem ... czy możesz krótko wyjaśnić, co to jest „REQUEST_CODE” i do czego służy?
poeschlorn
2
@poeschlorn Anna opublikowała link do szczegółowych poniżej. Mówiąc prościej, RequestCode umożliwia korzystanie startActivityForResultz wielu celów. Kiedy zamiary powrócą do twojej aktywności, sprawdzasz RequestCode, aby zobaczyć, które zamiary powracają i odpowiednio reagujesz.
Ponieważ dostawca może być „”, rozważ użycie int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Jeśli tryb = 0 GPS jest wyłączony
Levon Petrosyan
31
Oto kroki:
Krok 1: Utwórz usługi działające w tle.
Krok 2: Wymagane są także następujące uprawnienia w pliku manifestu:
android.permission.ACCESS_FINE_LOCATION
Krok 3: Napisz kod:
finalLocationManager manager =(LocationManager)context.getSystemService (Context.LOCATION_SERVICE );if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER ))Toast.makeText(context,"GPS is disabled!",Toast.LENGTH_LONG).show();elseToast.makeText(context,"GPS is enabled!",Toast.LENGTH_LONG).show();
GPS będzie używany, jeśli użytkownik zezwolił na korzystanie z niego w ustawieniach.
Nie możesz już tego jawnie włączyć, ale nie musisz - to naprawdę ustawienie prywatności, więc nie chcesz go poprawiać. Jeśli użytkownik jest w porządku z aplikacjami uzyskującymi dokładne współrzędne, zostanie włączony. Następnie interfejs API menedżera lokalizacji użyje GPS, jeśli to możliwe.
Jeśli Twoja aplikacja naprawdę nie jest przydatna bez GPS i jest wyłączona, możesz otworzyć aplikację ustawień na prawym ekranie, używając intencji, aby użytkownik mógł ją włączyć.
W twoim LocationListener, zaimplementuj onProviderEnabledi onProviderDisabledobsługi zdarzeń. Gdy zadzwonisz requestLocationUpdates(...), jeśli GPS jest wyłączony w telefonie, onProviderDisabledzostanie wywołany; jeśli użytkownik włączy GPS, onProviderEnabledzostanie wywołany.
InKotlin:-How to check GPS is enable ornot
val manager = getSystemService(Context.LOCATION_SERVICE)asLocationManagerif(!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()}
Odpowiedzi:
Najlepszym sposobem wydaje się być:
źródło
alert
całą aktywność, abyś mógł ją zamknąć w onDestroy, aby uniknąć wycieku pamięci (if(alert != null) { alert.dismiss(); }
)LocationManager.NETWORK_PROVIDER
zwróci prawdęW Androidzie możemy łatwo sprawdzić, czy GPS jest włączony w urządzeniu, czy nie przy użyciu Menedżera lokalizacji.
Oto prosty program do sprawdzenia.
GPS włączony lub nie: - Dodaj poniższy wiersz uprawnień użytkownika w AndroidManifest.xml, aby uzyskać dostęp do lokalizacji
Twój plik klasy Java powinien być
Wynik będzie wyglądał
źródło
alert
całą aktywność, abyś mógł ją zamknąć,onDestroy()
aby uniknąć wycieku pamięci (if(alert != null) { alert.dismiss(); }
)tak, ustawień GPS nie można już zmienić programowo, ponieważ są to ustawienia prywatności i musimy sprawdzić, czy są włączone w programie, czy nie, i obsłużyć je, jeśli nie są włączone. możesz powiadomić użytkownika, że GPS jest wyłączony i użyć czegoś takiego, aby wyświetlić użytkownikowi ekran ustawień, jeśli chcesz.
Sprawdź, czy dostawcy lokalizacji są dostępni
Jeśli użytkownik chce włączyć GPS, może wyświetlić ekran ustawień w ten sposób.
W swoim onActivityResult możesz sprawdzić, czy użytkownik ją włączył
To jeden ze sposobów, aby to zrobić i mam nadzieję, że to pomoże. Daj mi znać, jeśli robię coś źle.
źródło
startActivityForResult
z wielu celów. Kiedy zamiary powrócą do twojej aktywności, sprawdzasz RequestCode, aby zobaczyć, które zamiary powracają i odpowiednio reagujesz.provider
Może być pusty. Musiałem zmienić czek na(provider != null && !provider.isEmpty())
Oto kroki:
Krok 1: Utwórz usługi działające w tle.
Krok 2: Wymagane są także następujące uprawnienia w pliku manifestu:
Krok 3: Napisz kod:
Krok 4: Lub po prostu możesz sprawdzić za pomocą:
Krok 5: Uruchom swoje usługi w sposób ciągły, aby monitorować połączenie.
źródło
Tak, możesz sprawdzić poniżej to kod:
źródło
Ta metoda korzysta z usługi LocationManager .
Link źródłowy
źródło
GPS będzie używany, jeśli użytkownik zezwolił na korzystanie z niego w ustawieniach.
Nie możesz już tego jawnie włączyć, ale nie musisz - to naprawdę ustawienie prywatności, więc nie chcesz go poprawiać. Jeśli użytkownik jest w porządku z aplikacjami uzyskującymi dokładne współrzędne, zostanie włączony. Następnie interfejs API menedżera lokalizacji użyje GPS, jeśli to możliwe.
Jeśli Twoja aplikacja naprawdę nie jest przydatna bez GPS i jest wyłączona, możesz otworzyć aplikację ustawień na prawym ekranie, używając intencji, aby użytkownik mógł ją włączyć.
źródło
Ten fragment kodu sprawdza status GPS
`
źródło
W twoim
LocationListener
, zaimplementujonProviderEnabled
ionProviderDisabled
obsługi zdarzeń. Gdy zadzwoniszrequestLocationUpdates(...)
, jeśli GPS jest wyłączony w telefonie,onProviderDisabled
zostanie wywołany; jeśli użytkownik włączy GPS,onProviderEnabled
zostanie wywołany.źródło
źródło