Android 프로그램은 새로운 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 잠금 화면 아래 창 기능을 개발하여 여러분에게 도움을 주기를 바랍니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.