以下方法前2个在2.3.5和4.1.1中测试成功,第3个方法在2.3.5中测试没问题,但在4.1.1中无效,待解决。详见android.provider.Settings.Secure类。
记得在AndroidManifest.xml中声明相关权限:
-
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
-
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
-
<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>
-
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
1. 打开WiFi最简单,直接调用系统的方法即可:
-
-
-
privatevoidtoggleWiFi(Contextcontext,booleanenabled){
-
WifiManagerwm=(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>
-
-
-
-
privatevoidtoggleMobileData(Contextcontext,booleanenabled){
-
ConnectivityManagerconMgr=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
-
Class<?>conMgrClass=null;
-
FieldiConMgrField=null;
-
ObjectiConMgr=null;
-
Class<?>iConMgrClass=null;
-
MethodsetMobileDataEnabledMethod=null;
-
try{
-
-
conMgrClass=Class.forName(conMgr.getClass().getName());
-
-
iConMgrField=conMgrClass.getDeclaredField("mService");
-
-
iConMgrField.setAccessible(true);
-
-
iConMgr=iConMgrField.get(conMgr);
-
-
iConMgrClass=Class.forName(iConMgr.getClass().getName());
-
-
setMobileDataEnabledMethod=iConMgrClass.getDeclaredMethod("setMobileDataEnabled",Boolean.TYPE);
-
-
setMobileDataEnabledMethod.setAccessible(true);
-
-
setMobileDataEnabledMethod.invoke(iConMgr,enabled);
-
}catch(ClassNotFoundExceptione){
-
e.printStackTrace();
-
}catch(NoSuchFieldExceptione){
-
e.printStackTrace();
-
}catch(SecurityExceptione){
-
e.printStackTrace();
-
}catch(NoSuchMethodExceptione){
-
e.printStackTrace();
-
}catch(IllegalArgumentExceptione){
-
e.printStackTrace();
-
}catch(IllegalAccessExceptione){
-
e.printStackTrace();
-
}catch(InvocationTargetExceptione){
-
e.printStackTrace();
-
}
-
}
3. 打开GPS也比较麻烦,与打开移动网络一样,没有直接的方法。在网上搜索了一下,据说采用反射去调用系统的方法仍然会失败,有网友用另外一条路实现了同样的功能,在2.3.5系统测试可以通过,在4.1.1系统中测试无效,待解决:
-
-
-
-
-
-
privatevoidtoggleGPS(){
-
IntentgpsIntent=newIntent();
-
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(CanceledExceptione){
-
e.printStackTrace();
-
}
-
}
-
分享到:
相关推荐
这个是android上的wifi开关按钮,写这个主要是因为出于省电和减少辐射的原因,我经常要把手机的wifi给关了。android倒是自带有个开关wifi的widget,但是太占地方了,所以还是自己写一个吧。分享出来希望对大家有用。
android开关移动网络代码 比较精简的一段代码 绝对有效
Wifi 开关、连接、GPS搜星(2)
支持2.1以上的android版本,可以把里面的APK下载到真机上测试,可以做到和系统的GPS开关同步控制,源码是在LINUX下编译的,因为android2.1把修改GPS开关的代码HIDE了,所以在2.1window平台下是编译不了。但是APK直接...
3.设置--显示中加入了切换以太网和wifi网络优先级开关. 4.persist.sys.ethcontrol 默认值 0 wifi优先 1 以太网优先 5.另外增加 以太网断网后(以太网的局域网是通的),自动切换4G数据网络; wifi网络数据中断(wifi...
【Android】代码开启/关闭GPSDemo 相关文章:... 为了方便看效果,您可以在在onCreate中添加finish();方法,然后打开系统GPS设置页面再运行代码,这样就能看到GPS开关的变化了。
实现wifi开关,扫描,代码实现连接某个wifi
Wifi 开关、连接、GPS搜星 1.自动断开,连接测试 2.搜索wifi列表 3.输入密码连接wifi 4.GPS搜索卫星
这是一个手机移动网络的开关按钮,安装好后直接点击这个应用的图标就能打开或关闭手机的移动网络。你可将它的快捷方式放在主页面上作为一个按钮使用。
Wifi 开关、连接、GPS搜星 1.自动断开,连接测试 2.搜索wifi列表 3.输入密码连接wifi 4.GPS搜索卫星.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
轻轻松松 一键开关WIFI 让你不再为设计wifi而烦恼
android控制WIFI开关
WIFI智能开关原理图和PCB,采用涂鸦WIFI模块。给公司设置的,批量生产过。支持一路,二路,和三路开关。
非常好用的一款WIFI开关软件,可以非常快速的开关WIFI,比手动方便多了
指定ssid和密码及连接类型使用命令控制开关连接WiFi,对于部分无屏幕或者屏幕异常的移动设备,可使用命令开启连接WiFi
一段关于wifi的代码
其中包含esp8266使用lua实现操作GPIO,串口,定时器,TCP服务器和客户端,UDP,本地mqtt, 数据存储等源码和说明文档; 制作自己简单的wifi开关
适用于支持虚拟Wifi的Win7操作系统 将全部内容复制粘贴到记事本中并另存为“虚拟Wifi开关.bat”即可使用 首次运行须参考“帮助”对网络进行配置
WiFi开关 Android API ...生成锁定和解锁WiFi开关的数据 七.生成手机给插座设置时间的数据 八.生成手机发送查询WiFi开关状态信息的数据 九.生成手机给插座设置定时功能的数据 十.生成删除定时指令的数据
wifi 开关手机软件,欢迎使用!