最近公司在锁屏功能,类似小米的百变锁屏,可以手动切换锁屏样式和管理锁屏。
IPhone锁屏是比较经典的锁屏样式,由于是做山寨手机的,当然要模仿下了。下面是的是效果图。
我所做的是锁屏管理的功能,但是本文所介绍的不是锁屏的内容,只是怎么样显示内容而已,特此声明。
对于Android锁屏,我是这样理解的,就是一个View遮挡了你的显示界面,使你如果要继续操作,必须把这个view给消失掉,所以这样就出现了锁的效果。
然在在这个view上显示必要的信息,就可以了。
在开发锁屏管理的功能的时候,我首先研究了系统的锁屏,发现系统的锁屏核心的代码是在
frameworks\base\policy\src\com\android\internal\policy\impl\*
目录下面。
其次说锁屏的显示的内容,Android系统锁屏的常见的内容有:
1、未读短息,未接电话
2、充电状态
3、时间、日期、还可以加天气
4、其他的快捷方式,如:相机,音乐播放器等
5、其他的暂时未知
对于锁屏,理解最多的是面向接口编程,说白了是回调,Android的系统底层已经写好了,当上面的内容中有一个发生该变的时候,就可以调用回调,来更新显示;
对于回调,我也不做解释,大家的都懂的。
所以在Android源码的policy目录下面定义很多的接口,这些接口都是定义了当某些事件发送改变的时候,可以通过调用实现类来执行,实现类当然是在具体某一种锁屏的。
比如上面的显示内容就可以定义这样的回调(下面也是只是做一个比方,代码中没有实)
public interface LockInfoCallback {
public void onUnreadMessage(int count);
public void onMissCall(int count);
public void onBatteryChange(int status,int level);
public void onDateTimeChange();
public void onWeatherChange(WeahterInfo info);
public void onToCamera();
public void onToMusic();
}
下面分别介绍以上内容的获取方法;
1、未读短信和未接电话,这个里面的数据是在Android系统的/data/data/数据库里面,具体的我也是从网上找到的,我的源码里面没有介绍,如果有需要的朋友可以联系我。
2、充电状态,这个Androi系统有对应的接口可以获取,当系统的电量发生变化的时候,会发送这个下面的Action
Intent.ACTION_BATTERY_CHANGED
只要在context里面注册一个BroadcastReceiver,就可以获取详细的信息,当然包括很多信息,我们索要的只是,当前是否在充电状态,充电装的百分比,以及是否充满。
3、时间和日期,天气:
时间和日期类似于上面的充电状态,也可以通过注册广播来监听时间和日期的改变;
常见的需要监听的广播有:
intentFilter.addAction(Intent.ACTION_TIME_TICK); // 时间流逝
intentFilter.addAction(Intent.ACTION_TIME_CHANGED); // 时间改变
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);// 时区变化
intentFilter.addAction(Intent.ACTION_LOCALE_CHANGED); // 该更时区
4:其他的快接方式
这个跟简单, 只要通过intent跳转到对象的界面就看了,再次不做详细介绍;