以下方法前2个在2.3.5和4.1.1中测试成功,第3个方法在2.3.5中测试没问题,但在4.1.1中无效,待解决。详见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方法,查看源代码发现,它是调用IConnectivityManager类中的setMobileDataEnabled(boolean)方法。由于方法不可见,只能采用反射来调用:
- /**
- * 移动网络开关
- */
- 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也比较麻烦,与打开移动网络一样,没有直接的方法。在网上搜索了一下,据说采用反射去调用系统的方法仍然会失败,有网友用另外一条路实现了同样的功能,在2.3.5系统测试可以通过,在4.1.1系统中测试无效,待解决:
- /**
- * <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模块 NFC和GPS卷》是由邓凡平编著的一本技术书籍,主要探讨了Android系统中三个重要的无线通信技术:WiFi、NFC(近场通信)和GPS(全球定位系统)。这本书以文字版的形式,深入浅出地讲解了...
这本书详细阐述了Android平台下WiFi、NFC(近场通信)以及GPS(全球定位系统)的工作原理、开发实践和应用案例,对于想要在移动设备上实现高效网络连接、智能交互和精准定位的开发者来说,是一份不可多得的参考资料...
在MapABCAndroidApiDemos这个项目中,通常会包含一系列关于地图API的示例代码,可能包括使用GPS、WIFI和网络定位功能来显示用户当前位置、路径规划、地理编码(将地址转换为坐标)和反地理编码(将坐标转换为地址)...
在安卓(Android)系统中,定位服务是移动应用开发中的重要组成部分,主要依赖于GPS(全球定位系统)和WIFI基站来获取设备的位置信息。这个压缩包“安卓Android源码——androidGPS及WIFI基站定位坐标源码.zip”提供...
`Android实现GPS定位.pdf`和`Android实现GPS定位(1).pdf`可能包含关于如何在Android应用中启用和使用GPS服务的教程。通常,开发者需要请求权限,调用LocationManager服务,注册GPS监听器,然后解析接收到的位置更新...
在Android操作系统中,WiFi、NFC(近场通信)和GPS是三个至关重要的移动通信技术。本篇文章将针对这些主题进行深入探讨,旨在为初学者提供一个全面且基础的了解。 首先,我们来讨论Android WiFi模块。WiFi是无线...
在Android系统中,GPS与网络定位(WiFi和移动网络)、传感器等结合,为用户提供精准的位置信息。本书将深入解析Android的定位框架,包括如何开启和关闭GPS,如何获取连续的定位更新,以及如何处理定位权限和隐私问题...
总的来说,这个源码包提供了学习和实践Android定位服务的宝贵资源,涵盖了从基础的GPS定位到更复杂的WiFi和基站定位,以及可能的融合定位策略。对于任何想要提升Android定位技能的开发者来说,这是一个很好的学习...
《深入理解Android:WiFi模块 NFC和GPS卷》是邓凡平先生的一本深入解析Android系统中无线通信技术的专业书籍,主要涵盖了Android系统中WiFi、NFC(近场通信)和GPS(全球定位系统)这三个重要模块。这本书对于...
Android WiFi LBS(Location-Based Services,基于位置的服务)定位是通过结合WiFi网络信号和移动通信基站信息来确定设备的位置。这种定位方式在GPS信号不可用或者信号弱的室内环境尤为实用。下面将详细介绍Android ...
Android中使用`LocationManager`服务和`GpsLocationProvider`来获取GPS位置。 2. **基站定位(Cell ID)**:基于手机连接的移动网络基站信息来确定位置。它依赖于运营商的基站数据,适用于城市环境,但精度较低,...
9. **异常处理**:在网络测速过程中,可能会遇到网络连接问题、服务器错误等情况,因此需要编写异常处理代码,确保App在遇到问题时能优雅地处理并给出反馈。 10. **性能优化**:考虑到移动设备的资源限制,开发者还...
《深入理解Android WiFi NFC和GPS卷》是由邓凡平撰写的一本专著,全面解析了Android系统中的无线网络、近场通信以及定位技术的核心概念与实现机制。这本书旨在帮助开发者和爱好者深入掌握这三个关键技术,提升在...
在Android平台上,Google提供了一套全面的定位服务,使得开发者能够轻松实现基于GPS、Wi-Fi基站和移动网络的综合定位功能。这篇文档将详细介绍如何在Android应用中利用这些技术进行定位。 首先,我们需要理解...
它利用了移动网络基础设施,无需开启GPS,所以在室内或城市环境中具有较好的可用性。基站定位的精度受到基站分布密度的影响,城市中基站密集,因此精度相对较高,但在偏远地区或农村,由于基站稀疏,定位可能不太...
在Android中,使用`WifiManager`类和`LocationManager`服务结合,通过`addWifiListener()`监听WIFI信号,并调用`requestLocationUpdates()`请求定位更新。WIFI定位在城市环境中精度较高,但依赖于WIFI热点的密度。 ...
综上所述,《深入理解Android:Wi-Fi、NFC和GPS卷》是一本全面覆盖Android平台上三大关键模块的专业书籍,不仅适合Android系统工程师、应用开发工程师和BSP开发工程师阅读,也为那些希望深入了解移动通信技术的读者...
在Android平台上,对WIFI状态的监控是移动应用开发中的一个重要功能,特别是在涉及网络连接、定位服务或数据传输的应用中。本文将详细讲解如何在Android中监控WIFI的状态,并介绍相关知识点。 首先,Android提供了`...
在网络条件良好的情况下,百度GPS可以快速给出初步的位置信息,尤其在城市环境和室内,其定位速度往往优于内置GPS。此外,百度还提供了定位优化算法,如差分GPS技术,进一步提高了定位精度。 从源码角度来看,...
在Android平台上,实现精准的位置服务是开发者们常常面临的需求,这通常涉及到三种主要的定位技术:基站定位、Wi-Fi定位和GPS(全球定位系统)定位。这篇内容将深入探讨这些定位方式以及它们在源码中的实现。 1. **...