2013-05-25 3 views
4

Je veux que mon application soit capable d'activer/désactiver les données GPS et mobiles par programmation car il y a beaucoup d'applications comme tasker, flux de profil, lookout extra qui peut le faire donc je l'ai recherché mais pas trouvé code mais ils n'ont pas fonctionné.Comment activer/désactiver les données GPS et mobiles dans Android par programme?

private void setMobileDataEnabled(Context context, boolean enabled) { 
final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
final Class conmanClass = Class.forName(conman.getClass().getName()); 
final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
iConnectivityManagerField.setAccessible(true); 
final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
setMobileDataEnabledMethod.setAccessible(true); 

setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); 
} 

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); 
} 
} 

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

if(provider.contains("gps")){ //if gps is enabled 
    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); 
} 
} 
+0

Quelle version android utilisez-vous pour tester? – Oam

+0

android 2.3 et 4.1.2 –

+0

Essayez le code ci-dessous, laissez-moi savoir si cela a fonctionné. – Oam

Répondre

1

Essayez ceci pour allumer gps

public void turnGPSOn() 
{ 
    Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE"); 
    intent.putExtra("enabled", true); 
    this.ctx.sendBroadcast(intent); 

    String provider = Settings.Secure.getString(ctx.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")); 
     this.ctx.sendBroadcast(poke); 


    } 
} 

pour désactiver le GPS,

public void turnGPSOff() 
{ 
    String provider = Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if(provider.contains("gps")){ //if gps is enabled 
     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")); 
     this.ctx.sendBroadcast(poke); 
    } 
} 

Pour les données mobiles, avez-vous ajouté l'autorisation dans le manifeste? Si ce n'est pas le cas, essayez d'ajouter et vérifiez-le. Faites-moi savoir si tout a fonctionné.

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 

+0

son genre de travail merci, mais ce qu'il fait est d'activer le service, donc si l'ai commencé en utilisant mon application une icône apparaît sur le dessus de la barre d'état et il est la recherche de GPS ...... et si je l'éteins même manuellement ou à partir de l'application, il ne va pas à partir de là et sur Android 4.1.2 il n'a pas activé l'icône GPS dans la barre d'état, mais il a commencé le service, mais dans Android 2.3 il allumé l'icône et a également commencé le service. –

+0

Heureusement, votre hack GPS repose sur un défaut de sécurité qui a été corrigé depuis un certain temps. – CommonsWare

+0

@CommonsWare Merci de mentionner, je vais le corriger dans mes futurs scénarios. – Oam

4

Je veux ma demande pour pouvoir activer/désactiver le GPS

Heureusement, cela est impossible, pour des raisons de confidentialité évidentes. Bien qu'il y ait eu quelques hacks, comme celui de votre question, qui ont l'habitude de fonctionner, ces failles de sécurité ont depuis été corrigées.

comme il y a de nombreuses applications comme Tasker, flux de profil, surveillance supplémentaire qui peut faire

Vous êtes invités à fournir la preuve que l'une de ces applications peut le faire sur les versions modernes d'Android.

+0

im le développeur de Profile Flow .. et concernant cette discussion, contrôler/modifier le réglage GPS n'est pas possible dans les dernières versions d'Android .. sauf si elle est enracinée! – amithgc

+0

Puisque la question portait aussi sur le réseau mobile, et puisque vous n'en avez rien dit, je suppose que cette fonctionnalité est toujours en place pour tous les roturiers ... :)? – TacB0sS

+0

@ TacB0sS: Je n'ai aucune idée concernant les données mobiles. – CommonsWare

Questions connexes