您好,登錄后才能下訂單哦!
小編給大家分享一下Android怎么實(shí)現(xiàn)帶頁(yè)面切換的鎖屏功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一個(gè)簡(jiǎn)單的Android 鎖屏小Demo,可以設(shè)置左滑有滑,我簡(jiǎn)單的了解一下自定義鎖屏,順便總結(jié)了一下思路順便畫個(gè)圖幫助理解。
我的效果圖
代碼思路
鎖屏分為兩塊,一塊是UI(自定義布局)另一塊這就是服務(wù)了
自定義鎖屏布局
ACTION_DOWN按下:中間的ImageView會(huì)變成另一種形態(tài)
ACTION_MOVE移動(dòng): 移動(dòng)到左/右邊,左/右ImageView形態(tài)也要發(fā)生變化,
ACTION_UP抬起:判斷滑動(dòng)到左/右那邊,或者回到最初位置
*服務(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),首先會(huì)查找是否存在和被啟動(dòng)的Activity具有相同的親和性的任務(wù)棧 zdLockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); /*注冊(cè)廣播*/ IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON"); MyService.this.registerReceiver(mScreenOnReceiver, mScreenOnFilter); /*注冊(cè)廣播*/ IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF"); MyService.this.registerReceiver(mScreenOffReceiver, mScreenOffFilter); }
這個(gè)View 就是之前自定義的View,我只說(shuō)說(shuō)核心的代碼 稍后上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)程序銷毀的時(shí)候.服務(wù)要重新啟動(dòng),不然這個(gè)app的鎖屏,會(huì)隨著app的銷毀而被銷毀
@Override public void onDestroy(){ super.onDestroy(); MyService.this.unregisterReceiver(mScreenOnReceiver); MyService.this.unregisterReceiver(mScreenOffReceiver); //在此重新啟動(dòng) startService(new Intent(MyService.this, MyService.class)); }
當(dāng)屏幕變量或者變暗的時(shí)候,要解除屏幕鎖定的方法,如果不解除 那只能一直鎖著了。
//屏幕變亮的廣播,我們要隱藏默認(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)限問(wè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" />
以上是“Android怎么實(shí)現(xiàn)帶頁(yè)面切換的鎖屏功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。