[컴][안드로이드] notification 에 close button 만드는 방법



Notification 에서 button 의 event handler 를 설정하는 것은

  • RemoteView.setOnClickPendingIntent(R.id.notificaiton, contentIntent);

를 통해서 할 수 있다.

여기서는 notification 에 close button 을 만들어 보자. close button 을 누르면 Service 로 동작하는 player 가 동작을 멈추고(pause), notification 이 사라지도록 할 것이다.


절차

전체적인 절차는 아래와 같다.

  1. close button 의 UI 를 만들고,
  2. setOnClickPendingIntent()
  3. onStartCommand() 에서 action 을 처리하는 부분을 만든다.


Codes


// notification
expandedView.setOnClickPendingIntent(
                R.id.noti_button_stop,
                PendingIntent.getService(this,
                        0,
                        new Intent("com.android.music.musicservicecommand.veto").setClass(this, Mp3PlayerService.class),
                        0));



// onStartcommand
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    Log.i(TAG, "Received start id " + startId + ": " + intent);

    String action = null;
    if (intent != null)
    {
        action = intent.getAction();
    }

    if ("com.android.music.musicservicecommand.veto".equals(action))
    {
        pause();
        stopForeground(true);
        this.mIsNotificationShowing = false;
    }

    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;


}

참고 onStartcommandCalled by the system every time a client explicitly starts the service by calling Context.startService, providing the arguments it supplied and a unique integer token representing the start request. Do not call this method directly.
이러면, notification 에 close button 을 누르면, onStartCommand() 가 호출되고, 이 안에서 Action 의 종류를 구분해서 close action 이면 stopForeground(true) 를 통해서 notification 이 사라지게 된다. true 가 startForeground() 를 통해 만들어진 notification 을 remove 하겠다는 뜻의 parameter 이다.



See Also


  1. Service API changes starting with Android 2.0 번역,네이버 블로그



댓글 없음:

댓글 쓰기