팝업 띄워야 하는 시점은 각자 다르기 때문에 적당한 위치를 잡아놓아야 한다.
필자의 경우 소켓으로 특정 메시지를 수신했을 때가 그 시점이다.
메시지를 수신하면 핸들러를 통해 백그라운드 서비스로 전달하고, 서비스에서 팝업 띄우는 작업을 실행한다.
호출부
팝업 띄울 시점{
PowerManager manager = (PowerManager)getSystemService(Context.POWER_SERVICE);
boolean bScreenOn = manager.isScreenOn();
if(bScreenOn){
Log.d("popup", "Screen ON");
}else{
Log.d("popup", "Screen OFF");
Intent popup = new Intent(getApplicationContext(), PopupActivity.class);
popup.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(popup);
}
}
띄울 팝업 액티비티에 대한 인텐트를 생성하여 액티비티를 띄운다.
FLAG_ACTIVITY_NEW_TASK 플래그를 사용하여 새로운 task를 생성하여 액티비티를 넣는다.
팝업 액티비티
public class PopupActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_popup);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
//WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
... 액티비티 화면 구성
}
}
액티비티 화면 구성하기 전에 flag를 설정하는게 중요하다.
FLAG_TURN_SCREEN_ON : 화면을 켠다.
FLAG_SHOW_WHEN_LOCKED : 화면 잠김 상태일때 보여준다.
FLAG_DISMISS_KEYGUARD : 화면잠금을 풀어준다.
AndroidManifest.xml
<activity
android:name=".PopupActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
android:excludeFromRecents="true"
android:taskAffinity=".popup">
</activity>
풀스크린 테마를 사용해야지만 잠금화면에서 내용을 표시할 수 있다고 한다.
팝업 액티비티 배경을 까맣게 해두고, 가운데에 버튼 등을 구성하면 카톡 팝업 비슷하게 나올듯하다.
'Programming' 카테고리의 다른 글
Android - 액티비티 <-> 서비스 통신 (0) | 2016.09.03 |
---|---|
Android - 로그캣(LogCat)에 로그 표시 안될 때. (0) | 2016.09.03 |
Android - 서비스 실행 유무 확인 (0) | 2016.09.03 |
Android - 기능별 Manifest 등록 (0) | 2016.09.03 |
Android - List<객체> remove시 exception (0) | 2016.09.03 |