`
tansitongba
  • 浏览: 503385 次
文章分类
社区版块
存档分类
最新评论

Android中使用代码开关GPS、移动网络(GPRS)、WiFi

 
阅读更多
以下方法在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网络设置(wifi、gprs)

    最近在做一个开启和关闭手机端网络的应用,找了许多资料,都不是很全,而且代码写的很乱,在这里总结一下,希望能帮助你,不用和我一样花那么多时间研究,多留点时间和女朋友那啥吧! 《!苦逼的程序猿!》 说明:...

    Android例子源码GPS、GPRS、WIFI状态判断+SIM卡信息读取

    这个“Android例子源码GPS、GPRS、WIFI状态判断+SIM卡信息读取”示例提供了相关的代码实现,帮助开发者了解如何在Android应用中检查这些关键信息。 首先,我们来探讨GPS(全球定位系统)状态的判断。在Android中,...

    Android widger一键开关(WIFI,蓝牙,GPRS)

    7. **GPRS管理**: 在Android中,GPRS的开关通常与移动数据的控制相关联,可以通过ConnectivityManager的setMobileDataEnabled()方法来实现。然而,这个方法在新的Android版本中可能不再推荐使用,更建议使用请求权限...

    GPS+GPRS源代码

    【GPS+GPRS源代码】是一个项目,主要目标是通过51系列单片机利用GPRS模块将GPS接收器获取的地理位置数据传输到个人计算机(PC)上。这个项目涉及了嵌入式系统、无线通信以及地理定位技术等多个IT领域的知识点。 ...

    Android例子源码GPS、GPRS、WIFI状态判断+SIM卡信息读取.zip

    这个压缩包包含的是一个Android应用开发的实例,主要涉及了如何获取并判断设备上的GPS、GPRS、WIFI状态,以及读取SIM卡信息。在Android平台上,这些功能是移动应用开发中的常见需求,用于提供定位服务、网络连接状态...

    Android中获取GSM、CDMA、Wifi信号强度

    在 Android 中,我们可以使用 TelephonyManager 类来获取 GSM 和 CDMA 信号强度,而 Wifi 信号强度可以使用 WifiManager 类来获取。下面我们将详细介绍如何获取这些信号强度。 首先,我们需要在 AndroidManifest....

    android GPRS开启关闭

    在Android系统中,GPRS(General Packet Radio Service)是一种数据通信技术,主要用于移动设备通过蜂窝网络进行数据传输。在现代智能手机中,虽然GPRS概念已经被更先进的3G、4G甚至5G技术取代,但在一些旧的或者...

    GPS及WIFI、GPRS基站定位坐标源码

    标题中的“GPS及WIFI、GPRS基站定位坐标源码”指的是一个软件开发项目,它包含用于实现多种定位技术的源代码。这个项目的核心是利用GPS(全球定位系统)、WIFI接入点信息以及GPRS(通用分组无线业务)基站的数据来...

    google gps实例demo(gps,wifi,gprs,基站)

    Google的Fused Location Provider API结合了WiFi和移动网络数据,提供更准确的定位服务。在示例中,可能会演示如何使用WiFi扫描和定位服务。 GPRS(通用分组无线业务)是2G移动通信网络的一部分,它提供了连续的...

    gprs便捷开关

    在移动设备中,GPRS(General Packet Radio Service)是一种广泛使用的移动数据通信技术,它允许用户在2G网络上进行持续的数据传输,为智能手机和平板电脑提供了上网功能。GPRS便捷开关,正如其名,是一种专门设计...

    GPS-GPRS.rar_GPRS gps_GPS_gps gprs_gps 命令

    描述中提到的“使用命令及相关程序”,意味着这个压缩包可能包含了一些用于控制和交互GPS与GPRS设备的源代码文件。 标签进一步强调了"GPS", "GPRS", "gps_gprs"以及"gps_命令",暗示我们将探讨如何通过命令来操作...

    代码打开gprs、获取gps坐标

    在Android平台上,我们可以使用`ConnectivityManager`和`NetworkInfo`类来检查和管理网络连接状态,包括GPRS。 GPS定位则更为复杂。GPS接收器通过接收至少四颗GPS卫星的信号来计算其精确位置。然而,由于隐私和安全...

    GPS.rar_GPRS connection_GPS_gps gprs

    GPRS是2G移动通信系统中的一种数据传输技术,它允许在移动设备上进行连续的数据传输,而GPS则是用于定位和导航的全球卫星导航系统。 描述中提到的是“一个测试GPS连接和GPRS连接的小程序,可驱动GPS和GPRS连接”。...

    Android禁用GPRS Demo效果

    在Android系统中,GPRS(General Packet Radio Service)是一种用于移动设备的数据通信技术,它允许设备通过2G网络进行分组交换数据传输。在当前的移动应用环境下,控制数据流量的使用是用户和开发者都非常关心的...

    [源码]android设备上GPRS的开启和关闭

    在Android设备上,GPRS(General Packet Radio Service)是一种用于移动通信的数据传输技术,它允许设备通过蜂窝网络进行连续的、低带宽的数据通信。本文将深入探讨如何在Android平台上实现GPRS的开启和关闭功能,...

    基于onenet平台的gps+gprs定位服务(arduino实现)

    标题中的“基于onenet平台的gps+gprs定位服务(arduino实现)”指的是利用Arduino微控制器结合GPS和GPRS模块,通过中国移动的OneNet物联网平台实现远程定位服务。这个项目的核心在于利用硬件设备采集GPS数据并通过...

    GPRS.rar_GPRS gps_GPRS定位 linux_GPS ARM_arm gprs_linux GPRS

    GPRS是一种移动通信技术,用于在2G和2.5G网络中传输数据,而GPS则是通过接收卫星信号实现地理位置定位的系统。ARM架构则广泛应用于各种嵌入式设备,包括智能手机、平板电脑以及物联网设备等。 描述中提到"GPS全球...

    gps+GPRS_sim300源代码

    标题中的“gps+GPRS_sim300源代码”指的是一个使用GPS和GPRS通信技术,结合SIM300模块的源代码项目。SIM300是GSM/GPRS模块,广泛应用于移动通信设备,如远程监控、数据传输等场景。这个项目特别适合基于STC12C5A60S2...

    GPS+GPRS模块

    GPS+GPRS模块是现代通信技术中的重要组成部分,它结合了全球定位系统(GPS)与通用分组无线服务(GPRS)的功能,为移动设备提供了定位和数据通信的能力。GPS用于接收卫星信号并计算设备的位置,而GPRS则提供了一种...

    gprs.zip_GPRS gps_gps gprs_sim908

    SIM908模块是一款集成了GPRS(通用分组无线业务)和GPS(全球定位系统)功能的通信模块,常用于物联网设备、车载导航、远程监控等应用中。该压缩包"**gprs.zip_GPRS gps_gps gprs_sim908**"提供了SIM908模块的驱动...

Global site tag (gtag.js) - Google Analytics