Android 는 페이지 전환 이 있 는 잠 금 화면 기능 을 구현 합 니 다.

간단 한 안 드 로 이 드 잠 금 화면 작은 Demo 는 왼쪽 이 미 끄 럽 고 미 끄 러 운 것 을 설정 할 수 있 습 니 다.저 는 사용자 정의 잠 금 화면 을 간단하게 알 아 보 는 동시에 생각 도 정리 하고 그림 도 그 려 서 이 해 를 도 울 수 있 습 니 다.

나의 효과 도

코드 사고
잠 금 화면 은 두 조각 으로 나 뉘 는데 하 나 는 UI(사용자 정의 레이아웃)이 고 다른 하 나 는 서비스 입 니 다.
사용자 정의 잠 금 화면 레이아웃
ACTION_DOWN 누 르 기:가운데 ImageView 는 다른 형태 로 변 합 니 다.
ACTION_MOVE 이동:왼쪽/오른쪽으로 이동,왼쪽/오른쪽 ImageView 형태 도 변화,
ACTION_UP 들 어 올 리 기:왼쪽/오른쪽 쪽으로 미 끄 러 지 거나 최초의 위치 로 돌아 갈 것 을 판단 합 니 다.
*서비스

 @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);
  //     ,              Activity            
  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;
 }
프로그램 이 삭 제 될 때 서 비 스 는 다시 시작 해 야 합 니 다.그렇지 않 으 면 이 app 의 잠 금 화면 은 app 이 삭 제 됨 에 따라 삭 제 됩 니 다.

@Override
 public void onDestroy(){
  super.onDestroy();
  MyService.this.unregisterReceiver(mScreenOnReceiver);
  MyService.this.unregisterReceiver(mScreenOffReceiver);
  //      
  startService(new Intent(MyService.this, MyService.class));
 }
화면 변수 나 어 두 워 질 때 화면 잠 금 을 해제 하 는 방법 은 해제 되 지 않 으 면 계속 잠 겨 있 을 수 밖 에 없습니다.

//       ,            
 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")){
    //      
    mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
    mKeyguardLock = mKeyguardManager.newKeyguardLock("zdLock 1");
    mKeyguardLock.disableKeyguard();
    startService(i);

   }
  }

 };
  //    /      ,      KeyguardManager            
 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);
   }
  }
};
권한 문제

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" /><!--   HOME       -->
<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" />
이 잠 금 화면 데모 와 관련 된 것 이 좀 많 습 니 다.제 가 쓴 이 블 로 그 는 중점 을 잡지 못 하고 번 거 롭 게 쓰 는 것 이 오히려 여러분 의 시간 을 낭비 합 니 다.아무 말 도 하지 않 고 코드 에서↓
원본 주소:자물쇠 스크린
보충 점
샤 오미 핸드폰 을 테스트 기로 사용 하려 면 반드시 이 데모 잠 금 화면 권한 을 켜 야 한다.핸드폰 설정 에서 app 을 찾 아 잠 금 화면 을 켜 야 한다.그렇지 않 으 면 실행 하 자마자 무너진다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기