Intereting Posts
Получение массива символов от пользователя без использования строки Не удается установить муравьев правильно для телефонной заставки, используя eclipse и windows 8 Как передать два или более аргументов выбора в методе «запрос» Как использовать setTag и getTag с пользовательским адаптером Парольный вход с использованием openID в android Как показать статус индикатора выполнения в процентах Как напрямую читать / записывать файлы с устройства и на устройство (например, эффект O_DIRECT-флага) на Java-пути? Ошибка предварительного компилятора Android на 21.0.1 android sdk SetHintTextColor () в EditText Как использовать новый Android Scrinker и установить useProguard false? Какое влияние имеет множество отчетов о сбоях в приложении Android Есть ли горячая клавиша для поиска функции в eclipse? Как изменить марку макета для Android ListView Programmatically Покрытие метода в приложении для Android без исходного кода Уничтожение / жизненный цикл ContentProvider

Как включить / отключить gps и мобильные данные в android программно?

Я хочу, чтобы мое приложение было в состоянии включить / отключить gps и мобильные данные программно, поскольку есть много приложений, таких как tasker, поток профилей, дополнительный просмотр, который может сделать это, поэтому я искал его, но не нашел полезного примера. Я нашел следующий код, но Они не работали.

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

Я хочу, чтобы мое приложение могло включить / отключить gps

К счастью, это невозможно, по очевидным причинам конфиденциальности. В то время как были некоторые хаки, как и в вашем вопросе, которые раньше работали, эти недостатки безопасности были исправлены.

Поскольку есть много приложений, таких как tasker, поток профилей, дополнительная информация, которая может это сделать

Вы можете предоставить доказательства того, что любое из этих приложений может сделать это на современных версиях Android.

Попробуйте это для включения 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); } } 

Для выключения 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); } } 

Для мобильных данных вы добавили разрешение в манифест? Если не пытайтесь добавить и проверить.

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

Дайте мне знать, если все сработает.