본문 바로가기

Programming

Android - 화면 꺼짐 상태에서 팝업 띄우기 (카톡처럼)

팝업 띄워야 하는 시점은 각자 다르기 때문에 적당한 위치를 잡아놓아야 한다.


필자의 경우 소켓으로 특정 메시지를 수신했을 때가 그 시점이다.


메시지를 수신하면 핸들러를 통해 백그라운드 서비스로 전달하고, 서비스에서 팝업 띄우는 작업을 실행한다.


호출부

팝업 띄울 시점{

  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>


풀스크린 테마를 사용해야지만 잠금화면에서 내용을 표시할 수 있다고 한다.



팝업 액티비티 배경을 까맣게 해두고, 가운데에 버튼 등을 구성하면 카톡 팝업 비슷하게 나올듯하다.