Java 如何以编程方式在android中启用/禁用gps和移动数据?
我希望我的应用程序能够以编程方式启用/禁用gps和移动数据,因为有许多应用程序,如tasker、profile flow、lookout extra都可以做到这一点,所以我搜索了它,但没有找到任何有用的示例。我找到了以下代码,但它们不起作用Java 如何以编程方式在android中启用/禁用gps和移动数据?,java,android,gps,settings,Java,Android,Gps,Settings,我希望我的应用程序能够以编程方式启用/禁用gps和移动数据,因为有许多应用程序,如tasker、profile flow、lookout extra都可以做到这一点,所以我搜索了它,但没有找到任何有用的示例。我找到了以下代码,但它们不起作用 private void setMobileDataEnabled(Context context, boolean enabled) { final ConnectivityManager conman = (ConnectivityManager) c
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
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"/>
如果一切顺利,请告诉我
我希望我的应用程序能够启用/禁用gps
幸运的是,出于明显的隐私原因,这是不可能的。虽然有一些黑客,比如你问题中的那个,曾经奏效,但这些安全漏洞已经被修复
因为有很多应用程序可以做到这一点,比如tasker、profile flow和lookout extra
欢迎您提供证据,证明这些应用程序中的任何一款都可以在现代版本的Android上实现这一点。您使用的Android版本是什么?Android 2.3和4.1.2请尝试以下代码,让我知道这是否有效。这是一种工作感谢,但它正在做的是打开服务,因此,如果使用我的应用程序启动它,状态栏顶部会出现一个图标,它正在搜索gps……如果我甚至手动或从应用程序关闭它,它不会从那里开始,在android 4.1.2上,它没有打开gps图标状态栏,但它启动了服务,但在android 2.3中,它打开了图标,也启动了服务忘记GPS。。。您至少可以禁用移动数据吗?如果是,如何。。。代码(GPS代码除外)有效吗?也,请提及其他需要更改的内容,如名称空间等……这是一种工作方式,谢谢,但它正在做的是打开服务,因此如果使用我的应用程序启动它,状态栏顶部会出现一个图标,它正在搜索gps……如果我甚至手动或从应用程序关闭它,它不会从那里开始,在android 4.1.2上也不会打开状态栏中的gps图标,但它启动了服务,但在android 2.3中,它打开了图标并启动了服务。幸运的是,您的gps攻击依赖于一个已经修复了相当长时间的安全漏洞。@感谢提及Commonware,我将在我的未来场景中更正它。我尝试了这个,它只是表明了这一点“搜索全球定位系统“但实际上并没有打开它。它在通知栏上显示gps图标,但实际上并没有打开配置文件流的开发者gpsim。”。。关于这一讨论,在最新版本的android中,控制/更改GPS设置是不可能的。。除非它生根!因为这个问题也是关于移动网络的,而且你什么也没提到,我想这个功能对我们所有的普通人来说都是有效的…:)?@TacB0sS:我不知道移动数据。我稍后会尝试一下,然后发布一个回复。。。感谢同样的想法,从4.2开始,设备区域设置更改api也受到了限制