2012-01-24 16 views

risposta

20

No, non lo è, ma è possibile aprire la finestra delle impostazioni dei servizi di localizzazione:

context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
-1

Utilizzare il seguente codice per avviare GPS

locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE); 
locationListener = new LocationListener(); 
locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

e il seguente codice per fermare GPS

locationManager.removeUpdates(locationListener); 

Per ulteriori dettagli, vedere documentations for LocationManager e for LocationListener.

+1

sto parlando di accendere (Impostazioni -> Posizione e sicurezza -> Usa reti wireless/Usa satelliti GPS) le opzioni del dispositivo Android a livello di programmazione. –

2
private void turnGPSOn(){ 
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 

if(!provider.contains("gps")){ //if gps is disabled 
    final Intent poke = new Intent(); 
    poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
    poke.setData(Uri.parse("3")); 
    sendBroadcast(poke); 
} 
} 

Ma questo supporto codice solo fino APK 8.

1

Sì, ma bisogna essere un Super User (sudo), il dispositivo deve essere radicato.

6

Abilitazione Località con la modalità Alta precisione o di risparmio della batteria, senza utente che ha bisogno di visitare Impostazioni

http://android-developers.blogspot.in/2015/03/google-play-services-70-places-everyone.html

+1

A partire da Google Play Services 7.0, questa dovrebbe essere la risposta accettata. È possibile avere le impostazioni di aggiornamento dell'app senza mai uscire dall'app. Vedi il link sopra. –

+2

Il link non dice molto sull'implementazione, mi sono perso qualcosa? –

+0

L'esempio di implementazione è qui: http://stackoverflow.com/questions/33251373/turn-on-location-services-without-navigating-to-settings-page – MorZa

0

Con recente aggiornamento Marshmallow, anche quando l'impostazione posizione è attiva, la vostra applicazione sarà necessario essere esplicitamente richiesto autorizzazione. Il modo consigliato per farlo è mostrare la sezione Autorizzazioni della tua app in cui l'utente può attivare l'autorizzazione come richiesto. Il frammento di codice per fare questo è come di seguito:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  
    if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  
     final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Location Permission"); 
     builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app."); 
     builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
  
      } 
     }); 
     builder.setNegativeButton(android.R.string.no, null); 
     builder.show(); 
    } 
} else { 
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    boolean isGpsProviderEnabled, isNetworkProviderEnabled; 
    isGpsProviderEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    isNetworkProviderEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    if(!isGpsProviderEnabled && !isNetworkProviderEnabled) { 
     final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Location Permission"); 
     builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app."); 
     builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(intent); 
      } 
     }); 
     builder.setNegativeButton(android.R.string.no, null); 
     builder.show(); 
    } 
} 

E l'override del metodo onRequestPermissionsResult come di seguito:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_REQUEST_COARSE_LOCATION: { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Log.d(TAG, "coarse location permission granted"); 
      } else { 
       Intent intent = new Intent(); 
       intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
       Uri uri = Uri.fromParts("package", getPackageName(), null); 
       intent.setData(uri); 
       startActivity(intent); 
      } 
     } 
    } 
} 

Un altro approccio è che si può anche utilizzare il SettingsApi di indagare quale fornitore di posizione (s) sono abilitato. Se nessuno è abilitato, puoi chiedere a una finestra di dialogo di cambiare le impostazioni dall'interno dell'app.

Problemi correlati