Notification 에서 button 의 event handler 를 설정하는 것은
- RemoteView.setOnClickPendingIntent(R.id.notificaiton, contentIntent);
를 통해서 할 수 있다.
여기서는 notification 에 close button 을 만들어 보자. close button 을 누르면 Service 로 동작하는 player 가 동작을 멈추고(pause), notification 이 사라지도록 할 것이다.
절차
전체적인 절차는 아래와 같다.- close button 의 UI 를 만들고,
- setOnClickPendingIntent()
- 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 이다.
댓글 없음:
댓글 쓰기