2009-06-26 15 views
27

Je suis en train d'écrire une application Android qui fonctionne avec le GPS. En ce moment je suis capable de déterminer si le GPS est activé. Mon problème est que je veux activer le GPS au démarrage de l'application si elle est désactivée. Comment puis-je faire ce programme?Comment activer le GPS par programmation dans Android Cupcake

+0

dépend de la version de petit gâteau. 1.5 ne le permet pas apparemment. – D3vtr0n

Répondre

51

Vous ne pouvez pas, en commençant par Android 1.5. Le plus que vous pouvez faire est d'ouvrir l'activité pour permettre à l'utilisateur de l'activer/désactiver. Utilisez l'action contenue dans android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS pour créer une intention d'ouverture de cette activité.

+3

Pourquoi est-ce désactivé? Pourquoi ne pas permettre aux développeurs de basculer cela? le widget de contrôle de puissance peut, donc nous devrions être en mesure de le faire aussi bien. Ne pensez-vous pas? –

+24

Il est désactivé pour des raisons de confidentialité. Si l'utilisateur souhaite désactiver le GPS, l'utilisateur doit désactiver le GPS, point final. – CommonsWare

+0

Ces gars semblent l'avoir compris. Malheureusement, l'apk est obscurci et je ne pouvais pas comprendre comment cela a été accompli. URL: https: //market.android.com/details? Id = at.abraxas.powerwidget.free & hl = fr –

15
if(!LocationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) 
{ 
    Intent myIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
    startActivity(myIntent); 
} 
+8

Ce code n'a pas été compilé pour moi sur android 2.2, car .isProviderEnabled n'est pas une méthode statique sur LocationManager.Le code de travail pour moi était le suivant (des excuses pour le formatage) LocationManager locationManager = (LocationManager) getSystemService (LOCATION_SERVICE); If (! LocationManager.isProviderEnabled (LocationManager.GPS_PROVIDER)) { Intention myIntent = nouvelle intention (Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity (myIntent); } –

-5

si votre question est au niveau utilisateur d'Android ces propriétés sont situées dans: "Settings -> Location -> Use wireless networks" -> "Settings -> Location -> Use GPS satellites".

Mais chez le développeur peut utiliser la classe "android.provider.Settings.Secure" avec les autorisations appropriées.

+0

Ce n'est pas la réponse, la personne qui pose la question voulait –

3

Vous pouvez utiliser les éléments suivants:

try { 
    Settings.Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, true); 
} catch (Exception e) { 
    logger.log(Log.ERROR, e, e.getMessage()); 
} 

mais il ne fonctionnera que si vous avez le niveau de protection de la signature du système. Alors vous avez besoin pour cuisiner votre propre image pour réellement:/

6

Ce code de méthode peut être une aide pour vous

private void turnGPSOnOff(){ 
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if(!provider.contains("gps")){ 
    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); 
    //Toast.makeText(this, "Your GPS is Enabled",Toast.LENGTH_SHORT).show(); 
    } 
} 
+2

oui ** cela peut être fait jusqu'à 2,2 (sdk 8) **. Pour plus d'informations, voir [Activer le GPS par programmation comme Tasker] (http://stackoverflow.com/a/5305835/383414) –

0

Vous devez utiliser le Location Settings Dialog des services de lecture qui invite l'utilisateur à activer les services de localisation (si nécessaire) avec un seul clic.

1

Vérifiez d'abord si le service de localisation est déjà activé ou non.

Vérification service de localisation est activé ou non

public boolean isLocationServiceEnabled(){ 
    LocationManager locationManager = null; 
    boolean gps_enabled= false,network_enabled = false; 

    if(locationManager ==null) 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    try{ 
     gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    }catch(Exception ex){ 
     //do nothing... 
    } 

    try{ 
     network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    }catch(Exception ex){ 
     //do nothing... 
    } 

    return gps_enabled || network_enabled; 

} 

Puis enfin ouvrir si le service de localisation en été éteint

if (isLocationServiceEnabled())) { 
      //DO what you need... 
    } else { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Seems Like location service is off, Enable this to show map") 
     .setPositiveButton("YES", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
          Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
            startActivity(intent); 
           } 
          }).setNegativeButton("NO THANKS", null).create().show(); 
       } 
Questions connexes