Intereting Posts
Android: загрузка изображения из Интернета с помощью Asynctask OnPostExecute () AsyncTask никогда не вызывается в AndroidTestCase Анимация накладывает предварительный просмотр активности камеры Символьное распознавание жеста Возможно ли отслеживать HTTP-трафик на Android, зная, какое приложение генерирует запросы? Диалоговое окно Timepicker на Android Wear. Материал timepicker слишком велик. AdRequest.Builder не может быть разрешен для типа Android – добавление и отображение элементов в ListView по одному с помощью ArrayAdapter Файлы Jar для Google Play Services Java Документы и источники Как добавить изображение в тело электронной почты Получите растровое изображение из массивов, затем загрузите его в фоновый Android Maven Plugin apklib Mojo не включает скомпилированный R в полученный апклиб Android-эмулятор не запускается PhoneStateListener onSignalStrengthsChanged перестает вызываться в службе Обрезать определенную часть изображения в android

Как включить / отключить 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"/> 

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