每次我們鎖鍵盤的時候,都看到如下頁面:
看多了就產生審美疲勞, 手機是追求個性化的消費品,想到就是替換她,再找一個。
如何替換呢?Android 提供如下函數:
KeyguardManager mKeyguardManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock mKeyguardLock = mKeyguardManager.newKeyguardLock("");
mKeyguardLock.disableKeyguard();
拿到鍵盤守護鎖,屏蔽她既可。接下來就是在合適的時機替代她, 這個合適的時機就是接收Intent.ACTION_SCREEN_OFF.
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, filter);
這裏有點奇怪的是,如果通過android.manifest 配置receiver的話,就得不到Action_screen_off 事件,我現在還納悶了……
最後就是再找一個她(個性化屏保)了, 我目前在模仿Hero屏保,所以就以她來說了。
首先用一個服務啓動一個Activity.
如下:
Intent it = new Intent();
it.setClass(this, ScreenShow.class);
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(it);
還要設置該Activity爲單態,並且爲透明, 屬性如下:
android:launchMode="singleTask" android:theme="@style/Theme.nd_Dialog" 其中透明Activity的Style設置爲
<style name="Theme.nd_Dialog" parent="android:style/Theme.Translucent">
<item name="android:windowNoTitle">true</item>
</style>
我們體驗過Hero屏保界面,就會發現,屏保的移動與手勢的用力大小相關。用力重的時候,屏保界面自動往下滑。
VelocityTracker mVelocityTracker;
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event);
mVelocityTracker.computeCurrentVelocity(1000);
float yVel = mVelocityTracker.getYVelocity();
其中屏保自動往下滑的動作不是用Animation來做的,而是通過Handler, 隔一段時間發送一個消息達到動畫的效果:
mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG_ANIMATE),
mCurAnimationTime);
比起Animation, 通過Handle可以達到自如地控制動畫.
最後,講講屏保內容用到Receiver,
// 時間Receiver
intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_TICK);
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
// 配置變化, 關閉系統,
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
intentFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
//網絡名稱Receiver(比如中國移動等) intentFilter.addAction(Telephony.Intents.SPN_STRINGS_UPDATED_ACTION);
// 電量改變Receiver
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
// Sim狀態Receiver intentFilter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED;
哈…… 慕然回首,那人卻在燈火闌珊處……