Android 프로그램은 새로운 QQ 잠금 화면 아래 창 기능을 개발합니다.

3719 단어
새 버전의 qq는 잠금 화면 아래에서 qq 메시지를 표시할 수 있으며, 마침 현재 진행 중인 프로젝트에도 이 기능이 필요하다.각종 실험과 자료 검색을 거쳐 마침내 실현되었고 과정은 어렵지 않았지만 일부 부분은 주의해야 한다.
다음은 실현 과정이다.
1. View 대신 Activity 사용
QQ의 팝업 창은 처음에는 플로팅 뷰인 줄 알고 윈도우 매니저로 추가했지만 어쨌든 표시되지 않았다. 나중에 친구의 알림에 Activity로 바뀌어 실현되었고 잠금 상태에서 팝업 창이 되었다.
2. Activity 설정
Activity는 화면 잠금 상태에서 창을 튕길 수 있도록 다음과 같은 설정을 해야 한다.
먼저 onCreate 메서드로 다음과 같은 4개의 플래그를 추가해야 합니다.

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
final Window win = getWindow(); 
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
//       
}
네 개의 표지 위치는 말 그대로 자물쇠 상태에서 표시하고 자물쇠를 풀며 화면의 길이를 유지하고 화면을 켜는 것이다.이렇게 하면 Activity가 시작되면 잠금이 해제되고 화면이 밝아집니다.
그리고 안드로이드 매니페스트에서xml 파일에서 이 activity에 대한 성명은 다음과 같은 속성을 추가해야 합니다.

레이아웃 파일에 대해view는 가운데에 있고 배경은 투명합니다.위쪽에 배경이 배경으로 설정되어 있기 때문에 데스크톱의 배경을 표시합니다.배경이 기본 흰색으로 설정되어 있으면, 창 뒤쪽이 흰색으로 되어 못생겨 보입니다.배경이 투명하게 설정되면 잠금 해제된 인터페이스(잠금 화면 비밀번호가 있어도 잠금 해제된 인터페이스가 표시됨)가 팝업 창 뒤에 표시되어 시각적 효과에 영향을 줍니다.
3. 라디오에서 잠금장치 탄창 가동
우리가 설정한 것은 잠금 화면 아래에서 창을 튕기는 것이기 때문에, 잠금 화면 아래에서 이 창을 튕기는 것은 적합하지 않다. (네가 한번 해 보아라. 효과가 매우 이상할 것이다.)일반적으로 라디오 수신기를 등록해서 지정된 방송을 받은 후에 탄창이 필요한지 판단하기 때문에 BroadcastReceiver의 수신 코드에서 잠금 상태인지 아닌지를 먼저 판단해야 한다.

@Override 
public void onReceive(Context context, Intent intent) { 
Log.d(LOG_TAG, intent.getAction()); 
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); 
if (km.inKeyguardRestrictedInputMode()) { 
Intent alarmIntent = new Intent(context, AlarmActivity.class); 
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(alarmIntent); 
} 
}
여기에 사용된 것은 KeyguardManager 클래스로 잠금 화면을 관리하는 데 사용되었다. 4.1 이후 이 클래스의 API는 isKeyguardLocked () 방법으로 잠금 여부를 판단했지만 4.1 이전에는 inKeyguardRestrictedInputMode () 방법만 추가할 수 있었다. 만약true라면 잠금 화면 상태였다.주의해야 할 것은 라디오에서 Activity를 시작하는 context는 Activity 대상이 아닐 수 있으므로 NEW 를 추가해야 한다는 것이다TASK의 플래그입니다. 그렇지 않으면 시작할 때 오류가 발생할 수 있습니다.
4. 창 정보 업데이트
만약에 창Activity 자체가 주동적으로 정보를 업데이트하지 않는다면 새로운 정보가 올 때Activity의 인터페이스를 업데이트해야 한다. 위에서 설정한singleInstance 시작 모드이기 때문에 onNew Intent(Intent intent) 방법을 덮어써야 한다. 이렇게 하면 이activity를 다시 시작할 때 새로운 intent가 이 방법에 전달된다.
5. 화면 다시 켜기
이Activity가 종료되지 않았지만 수동으로 잠금 버튼을 눌렀을 때 앞의 방송 수신기가 다시 시작할 때 화면이 환기되지 않기 때문에 우리는 activity에 화면을 깨우는 코드를 추가해야 한다. 여기는 전원 자물쇠를 사용한다.호출되므로 onNew Intent(Intent intent)에 추가할 수 있습니다.다른 적절한 라이프 사이클 방법에도 추가할 수 있습니다.다음과 같은 코드를 추가합니다.

PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE); 
if (!pm.isScreenOn()) { 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | 
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright"); 
wl.acquire(); 
wl.release(); 
}
6.일부 권한
다음은 실현 과정에서 필요한 권한들입니다. 저는 프로젝트 코드에서 추출한 것이기 때문에 더 많이 추가하거나 누락할 수 없습니다. 개발자 스스로 주의하십시오.

 
첫 번째는 화면 잠금 해제에 필요한 것이고, 두 번째는 전원 잠금 신청에 필요한 것이다.
위에서 설명한 것은 편집자가 여러분에게 소개한 안드로이드 프로그램이 새로운 버전의 QQ 잠금 화면 아래 창 기능을 개발하여 여러분에게 도움을 주기를 바랍니다!

좋은 웹페이지 즐겨찾기