Su un dispositivo Android Cupcake (1.5) abilitato, come posso controllare e attivare il GPS?Come scoprire se il GPS di un dispositivo Android è abilitato
risposta
Il modo migliore sembra essere la seguente:
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();
}
Principalmente si tratta di accendere l'intenzione di vedere la configurazione GPS, vedere http://github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/activity/main/MainActivity .java per i dettagli. – Marcus
Nice snippet of code. Ho rimosso @SuppressWarnings e non ricevo alcun avviso ... forse non sono necessari? – span
Consiglierei di dichiarare 'alert' per l'intera attività in modo da poterlo eliminare in onDestroy per evitare una perdita di memoria (' if (alert! = Null) {alert.dismiss();} ') – Cameron
GPS verrà utilizzato se l'utente ha permesso di essere utilizzato nelle sue impostazioni.
Non è possibile attivare questa opzione in modo esplicito, ma non è necessario: è un'impostazione di privacy davvero, quindi non si desidera modificarla. Se l'utente è a posto con le app che ottengono coordinate precise, sarà acceso. Quindi l'API del gestore località utilizzerà il GPS, se possibile.
Se l'app in realtà non è utile senza GPS ed è disattivata, è possibile aprire l'app delle impostazioni sullo schermo di destra utilizzando un intento in modo che l'utente possa abilitarlo.
sì Le impostazioni GPS non possono essere modificate più programmaticamente in quanto sono impostazioni della privacy e dobbiamo verificare se sono accese o meno dal programma e gestirlo se non sono accese. puoi avvisare l'utente che il GPS è spento e usare qualcosa di simile per mostrare la schermata delle impostazioni all'utente se lo desideri.
Verificare se i fornitori di localizzazione sono disponibili
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
}
Se l'utente vuole attivare il GPS si può mostrare la schermata delle impostazioni in questo modo.
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);
E nel tuo onActivityResult si può vedere se l'utente ha attivato o no
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
}
}
}
Questo è un modo per farlo e spero che aiuta. Fammi sapere se sto facendo qualcosa di sbagliato.
ciao, ho un problema simile ... puoi spiegare brevemente, cos'è il "REQUEST_CODE" e a cosa serve? – poeschlorn
@poeschlorn Anna ha pubblicato il link per la descrizione di seguito. In termini semplici, RequestCode consente di utilizzare 'startActivityForResult' con più intenti. Quando gli intenti ritornano alla tua attività, controlli il RequestCode per vedere quale intento sta tornando e rispondi di conseguenza. – Farray
Il 'provider' può essere una stringa vuota. Ho dovuto cambiare il controllo a '(provider! = Null &&! Provider.isEmpty())' – Pawan
In Android, possiamo facilmente verificare se il GPS è abilitato nel dispositivo o non utilizzare LocationManager.
Ecco un semplice programma da verificare.
GPS abilitato o meno: - aggiungere la riga permesso dell'utente di seguito nella AndroidManifest.xml per accedere alla posizione
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
vostro file di classe Java dovrebbe essere
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();
}
}
La volontà di uscita sembra
Ecco i passaggi:
Fase 1: creare servizi in esecuzione in background.
Fase 2: si richiede autorizzazione seguente nel file manifesto troppo:
android.permission.ACCESS_FINE_LOCATION
Fase 3: Codice scrittura:
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();
Fase 4: O semplicemente è possibile controllare utilizzando:
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Passaggio 5: Eseguire i servizi continuamente per monitorare la connessione.
Questo è il primo modo per controllare lo stato del GPS per me. Molte grazie! – Patryk
il passo 4, mi dà 'true' ogni volta, anche il * GPS * non è abilitato .... –
Indica che il GPS è abilitato anche quando è spento. –
Sì, è possibile controllare qui sotto è il codice:
public boolean isGPSEnabled (Context mContext){
LocationManager locationManager = (LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Come posso abilitarlo se è disabilitato –
Nella tua LocationListener
, implementare e onProviderEnabled
onProviderDisabled
gestori di eventi. Quando chiami requestLocationUpdates(...)
, se il GPS è disabilitato sul telefono, verrà chiamato il numero onProviderDisabled
; se l'utente abilita il GPS, verrà chiamato onProviderEnabled
.
Questo pezzo di codice controlla lo stato del GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
buildAlertMessageNoGps();
}
`
che dire di accettare la risposta? :) – dit