赞
踩
原文地址:http://blog.csdn.net/stevenhu_223/article/details/9052083?reload#java
在Android源码中,提供的快捷开关相对是比较少的,Android4.0系统默认提供的桌面快捷开关AppWidget上只有5种开关(分别是Wifi开关、蓝牙开关、GPS开关、同步开关、亮度设置开关)如下图所示:
当然,有时候就需要开发实现承载更多的快捷开关的AppWidget来实现用户体验,所以,本文主要针对这些开关的主要代码实现来重点解决开发这些快捷开关。
本文涉及到的快捷开关代码实现有Wifi、蓝牙、GPS、同步、亮度设置、飞行模式、移动数据流量(实现开启和关闭移动网络)、静音模式、重启、关机、锁屏、屏幕旋转等。需要注意的是:实现这些开关控制时都需要在AndroidManifest.xml文件中添加相应的权限。
一般这些开关在被设置改变时,系统会向外界发送相应的广播。所以,当用代码实现操作这些开关时,我们可以通过动态注册广播接收器,来接收这些系统发送的状态改变广播,以此来验证我们是否正常设置改变了这些开关。
当然,在本文以下的一些实例代码中,开关按钮也随着状态的改变而显示不同的文字,动态注册广播接收会显得有点多余,不过这只是证明系统会发送相应的广播,还应用开发还是有用处的,至少我们可以在不同的进程中监听接收这些广播。
1). Wifi开关由WifiManager这个类控制实现。
2). 当Wifi开关改变时,系统会向外界发送广播android.net.wifi.WIFI_STATE_CHANGED;
示列代码如下:
权限添加:
1). 蓝牙开关主要调用BluetoothAdapter相关方法实现
2). 蓝牙有四种状态:正在打开、打开、正在关闭、关闭
3). 蓝牙状态改变,系统向外界发送广播android.bluetooth.adapter.action.STATE_CHANGED或android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED;
示例代码如下:
权限添加:
1). 屏幕旋转开关设置主要调用android.provider.Settings.System的putInt和getInt方法实现。
2). 通过ContentObserver来动态观察屏幕旋转设置的改变。
示例代码如下:
权限添加:
1). 同步开关设置主要由ContentResolver类(抽象类)的静态函数来实现;
2). 当同步模式改变时,系统会向外界发送广播com.android.sync.SYNC_CONN_STATUS_CHANGED;
示例代码如下:
权限添加:
1). 亮度设置的主要调用Settings.System的putInt和getInt方法来处理,已经调用PowerManager的setBacklightBrightness方法来实现调节手机亮度。
2). PowerManager的setBacklightBrightness的方法是隐藏的,通过反射来调用实现。
3). 通过ContentObserver来动态观察亮度设置的改变。
示例代码如下:
权限添加:
1). 飞行模式主要是调用Settings.System的getInt和setInt方法来处理。
2). 当飞行模式改变时,系统会向外界发送广播android.intent.action.AIRPLANE_MODE;
示例代码如下:
权限添加:
1). 移动数据流量由ConnectivityManager类控制实现,这个类实现设置和获取移动流量状态的方法是隐藏的,所以我们只能通过反射来实现(或者在源码下编译APK)。
2). 相关广播为android.intent.action.ANY_DATA_STATE;
示例代码如下:
权限添加:
1). 静音模式由AudioManager控制实现,有三种状态:正常(有声音)、震动、静音
2). 当模式改变时,系统会向外界发送广播android.media.RINGER_MODE_CHANGED;
示例代码如下:
静音模式开关设置不需要添加权限。
<-----以下的开关设置实现需要有系统的UID使用Platform的apk签名,否则是没有权限调用的,会报SecurityException异常----->
注:1). 可以不通过apk签名,直接在android源码下编译生成apk,再将apk安装到手机;
2). 如果手机有root权限,那么也不需要apk签名,直接通过adb工具将apk推到system/app目录下:操作指令为adb remount---->adb push xxx.apk system/app (注:该apk将做为系统应用)
1). GPS开关设置的实现由Secure类的相关静态方法实现。
2).Secure的isLocationProviderEnabled和setLocationProviderEnabled调用需要APK签名;
示例代码如下:
权限添加:
1). 手机进入锁屏主要由PowerManager的goToSleep函数实现。
2). PowerManager的goToSleep调用需要apk签名。
示例代码:
权限添加:
1). 手机重启需要调用PowerManager的reboot方法实现,参数为null;
2). 该方法的调用,需要有系统的UID使用Platform的APK签名,否则是没有权限调用的,会报SecurityException异常。
示例代码如下:
权限添加:
1). 手机关机直接通过创建相关的Intent来启动一个对话框,根据对话框的确认或取消键来选择是否关机
2). 关机实现需要apk签名。
示例代码如下:
权限添加:
ok,本文的快捷开关代码实现介绍就到此结束,有了上面这些快捷开关的实现代码,那么当你想要开发一个AppWidget来承载和实现这些开关时就容易多了,至于如何去开发一个AppWidget,有兴趣的读者可以去找找相关这些方面的资料。
相关代码下载链接:http://download.csdn.net/detail/stevenhu_223/5572751
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。