Android實現(xiàn)帶頁面切換的鎖屏功能
一個簡單的Android 鎖屏小Demo,可以設(shè)置左滑有滑,我簡單的了解一下自定義鎖屏,順便總結(jié)了一下思路順便畫個圖幫助理解。

我的效果圖

代碼思路
鎖屏分為兩塊,一塊是UI(自定義布局)另一塊這就是服務(wù)了
自定義鎖屏布局
ACTION_DOWN按下:中間的ImageView會變成另一種形態(tài)
ACTION_MOVE移動: 移動到左/右邊,左/右ImageView形態(tài)也要發(fā)生變化,
ACTION_UP抬起:判斷滑動到左/右那邊,或者回到最初位置
*服務(wù)
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
//管理打開的窗口程序
mWinMng = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
i = new Intent(mContext, MyService.class);
i.setAction(MyService.LOCK_ACTION);
zdLockIntent = new Intent(MyService.this , MyService.class);
//設(shè)置此狀態(tài),首先會查找是否存在和被啟動的Activity具有相同的親和性的任務(wù)棧
zdLockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
/*注冊廣播*/
IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON");
MyService.this.registerReceiver(mScreenOnReceiver, mScreenOnFilter);
/*注冊廣播*/
IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF");
MyService.this.registerReceiver(mScreenOffReceiver, mScreenOffFilter);
}
這個View 就是之前自定義的View,我只說說核心的代碼 稍后上Demo
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent!=null){
String action = intent.getAction();
if(TextUtils.equals(action, LOCK_ACTION))
//鎖屏添加view
addView();
else if(TextUtils.equals(action, UNLOCK_ACTION))
{ //解屏移除view
removeView();
}
}
return Service.START_STICKY;
}
當(dāng)程序銷毀的時候.服務(wù)要重新啟動,不然這個app的鎖屏,會隨著app的銷毀而被銷毀
@Override
public void onDestroy(){
super.onDestroy();
MyService.this.unregisterReceiver(mScreenOnReceiver);
MyService.this.unregisterReceiver(mScreenOffReceiver);
//在此重新啟動
startService(new Intent(MyService.this, MyService.class));
}
當(dāng)屏幕變量或者變暗的時候,要解除屏幕鎖定的方法,如果不解除 那只能一直鎖著了。
//屏幕變亮的廣播,我們要隱藏默認(rèn)的鎖屏界面
private BroadcastReceiver mScreenOnReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context , Intent intent) {
Log.i(TAG, intent.getAction());
if(intent.getAction().equals("android.intent.action.SCREEN_ON")){
//鍵盤鎖的服務(wù)
mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("zdLock 1");
mKeyguardLock.disableKeyguard();
startService(i);
}
}
};
//屏幕變暗/變亮的廣播 , 我們要調(diào)用KeyguardManager類相應(yīng)方法去解除屏幕鎖定
private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context , Intent intent) {
String action = intent.getAction() ;
Log.i(TAG, intent.toString());
if(action.equals("android.intent.action.SCREEN_OFF")
|| action.equals("android.intent.action.SCREEN_ON") ){
mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("zdLock 1");
mKeyguardLock.disableKeyguard();
startService(i);
}
}
};
權(quán)限問題
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" /><!-- 屏蔽HOME鍵需要的權(quán)限 --> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
這個鎖屏Demo涉及到的東西有點多,我寫的這個博客掐不住重點,寫的繁瑣反而浪費大家時間,什么也不說了全在代碼中↓
源碼地址:鎖屏
補充一點
用小米手機當(dāng)測試機,一定要把這個Demo鎖屏權(quán)限打開,手機設(shè)置中找到app,打開鎖屏,不然一運行就崩掉。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android RecycleView和線型布局制作聊天布局
大家好,本篇文章主要講的是Android RecycleView和線型布局制作聊天布局,感興趣的同學(xué)趕緊來看一看吧,對你有幫助的話記得收藏一下2022-01-01
Android webview手動校驗https證書(by 星空武哥)
有些時候由于Android系統(tǒng)的bug或者其他的原因,導(dǎo)致我們的webview不能驗證通過我們的https證書,最明顯的例子就是華為手機mate7升級到Android7.0后,手機有些網(wǎng)站打不開了,而更新了webview的補丁后就沒問題了2017-09-09
Android中實現(xiàn)長按照片彈出右鍵菜單功能的實例代碼
這篇文章主要介紹了Android中實現(xiàn)長按照片彈出右鍵菜單功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Android App中使用ViewPager+Fragment實現(xiàn)滑動切換效果
這篇文章主要介紹了Android App中使用ViewPager+Fragment實現(xiàn)滑動切換效果的方法,借助Fragment可以使Activity的內(nèi)部管理邏輯更加清晰,需要的朋友可以參考下2016-03-03
android實現(xiàn)上傳本地圖片到網(wǎng)絡(luò)功能
這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)上傳本地圖片到網(wǎng)絡(luò)功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
Android自定義View實現(xiàn)QQ音樂中圓形旋轉(zhuǎn)碟子
這篇文章主要為大家詳細(xì)介紹了Android自定義View實現(xiàn)QQ音樂中圓形旋轉(zhuǎn)碟子,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
Android5.1系統(tǒng)通過包名給應(yīng)用開放系統(tǒng)權(quán)限的方法
這篇文章主要介紹了Android5.1系統(tǒng)通過包名給應(yīng)用開放系統(tǒng)權(quán)限的方法,此文介紹一種通過修改Android平臺系統(tǒng)層代碼,根據(jù)指定的應(yīng)用包名給對應(yīng)的應(yīng)用在該平臺上開放系統(tǒng)權(quán)限,需要的朋友可以參考下2017-11-11

