以下方法在2.1中测试成功。理论上2.1以上应该也可以。不过2.1以后的Android版本中已经有提供了相关方法,详见android.provider.Settings.Secure类。
记得在AndroidManifest.xml中声明相关权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
1. 打开WiFi最简单,直接调用系统的方法即可:
/**
* WIFI网络开关
*/
private void toggleWiFi(Context context, boolean enabled) {
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wm.setWifiEnabled(enabled);
}
2. 打开移动网络比较麻烦,系统没有直接提供开放的方法,只在ConnectivityManager类中有一个不可见的setMobileDataEnabled方法,查看源代码发现,它是调用I<wbr><span style="line-height:22px">ConnectivityManager类中的</span><span style="line-height:22px">setMobileDataEnabled(boolean)方法。由于方法不可见,只能采用反射来调用:</span></wbr>
/**
* 移动网络开关
*/
private void toggleMobileData(Context context, boolean enabled) {
ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Class<?> conMgrClass = null; // ConnectivityManager类
Field iConMgrField = null; // ConnectivityManager类中的字段
Object iConMgr = null; // IConnectivityManager类的引用
Class<?> iConMgrClass = null; // IConnectivityManager类
Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法
try {
// 取得ConnectivityManager类
conMgrClass = Class.forName(conMgr.getClass().getName());
// 取得ConnectivityManager类中的对象mService
iConMgrField = conMgrClass.getDeclaredField("mService");
// 设置mService可访问
iConMgrField.setAccessible(true);
// 取得mService的实例化类IConnectivityManager
iConMgr = iConMgrField.get(conMgr);
// 取得IConnectivityManager类
iConMgrClass = Class.forName(iConMgr.getClass().getName());
// 取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法
setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
// 设置setMobileDataEnabled方法可访问
setMobileDataEnabledMethod.setAccessible(true);
// 调用setMobileDataEnabled方法
setMobileDataEnabledMethod.invoke(iConMgr, enabled);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
3. 打开GPS也比较麻烦,与打开移动网络一样,没有直接的方法。在网上搜索了一下,据说采用反射去调用系统的方法仍然会失败,有网友用另外一条路实现了同样的功能:
/**
* <p>GPS开关
* <p>当前若关则打开
* <p>当前若开则关闭
*/
private void toggleGPS() {
Intent gpsIntent = new Intent();
gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
gpsIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(this, 0, gpsIntent, 0).send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
分享到:
相关推荐
最近在做一个开启和关闭手机端网络的应用,找了许多资料,都不是很全,而且代码写的很乱,在这里总结一下,希望能帮助你,不用和我一样花那么多时间研究,多留点时间和女朋友那啥吧! 《!苦逼的程序猿!》 说明:...
这个“Android例子源码GPS、GPRS、WIFI状态判断+SIM卡信息读取”示例提供了相关的代码实现,帮助开发者了解如何在Android应用中检查这些关键信息。 首先,我们来探讨GPS(全球定位系统)状态的判断。在Android中,...
7. **GPRS管理**: 在Android中,GPRS的开关通常与移动数据的控制相关联,可以通过ConnectivityManager的setMobileDataEnabled()方法来实现。然而,这个方法在新的Android版本中可能不再推荐使用,更建议使用请求权限...
【GPS+GPRS源代码】是一个项目,主要目标是通过51系列单片机利用GPRS模块将GPS接收器获取的地理位置数据传输到个人计算机(PC)上。这个项目涉及了嵌入式系统、无线通信以及地理定位技术等多个IT领域的知识点。 ...
这个压缩包包含的是一个Android应用开发的实例,主要涉及了如何获取并判断设备上的GPS、GPRS、WIFI状态,以及读取SIM卡信息。在Android平台上,这些功能是移动应用开发中的常见需求,用于提供定位服务、网络连接状态...
在 Android 中,我们可以使用 TelephonyManager 类来获取 GSM 和 CDMA 信号强度,而 Wifi 信号强度可以使用 WifiManager 类来获取。下面我们将详细介绍如何获取这些信号强度。 首先,我们需要在 AndroidManifest....
在Android系统中,GPRS(General Packet Radio Service)是一种数据通信技术,主要用于移动设备通过蜂窝网络进行数据传输。在现代智能手机中,虽然GPRS概念已经被更先进的3G、4G甚至5G技术取代,但在一些旧的或者...
标题中的“GPS及WIFI、GPRS基站定位坐标源码”指的是一个软件开发项目,它包含用于实现多种定位技术的源代码。这个项目的核心是利用GPS(全球定位系统)、WIFI接入点信息以及GPRS(通用分组无线业务)基站的数据来...
Google的Fused Location Provider API结合了WiFi和移动网络数据,提供更准确的定位服务。在示例中,可能会演示如何使用WiFi扫描和定位服务。 GPRS(通用分组无线业务)是2G移动通信网络的一部分,它提供了连续的...
在移动设备中,GPRS(General Packet Radio Service)是一种广泛使用的移动数据通信技术,它允许用户在2G网络上进行持续的数据传输,为智能手机和平板电脑提供了上网功能。GPRS便捷开关,正如其名,是一种专门设计...
描述中提到的“使用命令及相关程序”,意味着这个压缩包可能包含了一些用于控制和交互GPS与GPRS设备的源代码文件。 标签进一步强调了"GPS", "GPRS", "gps_gprs"以及"gps_命令",暗示我们将探讨如何通过命令来操作...
在Android平台上,我们可以使用`ConnectivityManager`和`NetworkInfo`类来检查和管理网络连接状态,包括GPRS。 GPS定位则更为复杂。GPS接收器通过接收至少四颗GPS卫星的信号来计算其精确位置。然而,由于隐私和安全...
GPRS是2G移动通信系统中的一种数据传输技术,它允许在移动设备上进行连续的数据传输,而GPS则是用于定位和导航的全球卫星导航系统。 描述中提到的是“一个测试GPS连接和GPRS连接的小程序,可驱动GPS和GPRS连接”。...
在Android系统中,GPRS(General Packet Radio Service)是一种用于移动设备的数据通信技术,它允许设备通过2G网络进行分组交换数据传输。在当前的移动应用环境下,控制数据流量的使用是用户和开发者都非常关心的...
在Android设备上,GPRS(General Packet Radio Service)是一种用于移动通信的数据传输技术,它允许设备通过蜂窝网络进行连续的、低带宽的数据通信。本文将深入探讨如何在Android平台上实现GPRS的开启和关闭功能,...
标题中的“基于onenet平台的gps+gprs定位服务(arduino实现)”指的是利用Arduino微控制器结合GPS和GPRS模块,通过中国移动的OneNet物联网平台实现远程定位服务。这个项目的核心在于利用硬件设备采集GPS数据并通过...
GPRS是一种移动通信技术,用于在2G和2.5G网络中传输数据,而GPS则是通过接收卫星信号实现地理位置定位的系统。ARM架构则广泛应用于各种嵌入式设备,包括智能手机、平板电脑以及物联网设备等。 描述中提到"GPS全球...
标题中的“gps+GPRS_sim300源代码”指的是一个使用GPS和GPRS通信技术,结合SIM300模块的源代码项目。SIM300是GSM/GPRS模块,广泛应用于移动通信设备,如远程监控、数据传输等场景。这个项目特别适合基于STC12C5A60S2...
GPS+GPRS模块是现代通信技术中的重要组成部分,它结合了全球定位系统(GPS)与通用分组无线服务(GPRS)的功能,为移动设备提供了定位和数据通信的能力。GPS用于接收卫星信号并计算设备的位置,而GPRS则提供了一种...
SIM908模块是一款集成了GPRS(通用分组无线业务)和GPS(全球定位系统)功能的通信模块,常用于物联网设备、车载导航、远程监控等应用中。该压缩包"**gprs.zip_GPRS gps_gps gprs_sim908**"提供了SIM908模块的驱动...