안드로이드에서 Notification
즉, status bar에 알람을 줄 때,
단순히 주어진 것만 쓰기에 상당히 부족한감이 있다.
그래서 custom으로 만들어 쓰는데
만들어 쓰기 위해서는 아래와 같이 해줘야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Notification.Builder builder = new Notification.Builder(getApplicationContext()); builder.setSmallIcon(R.drawable.ic_launcher); builder.setTicker("Sample"); builder.setWhen(System.currentTimeMillis()); builder.setNumber(10); builder.setContentTitle("Title"); builder.setContentText(""); Notification noti = builder.build(); Intent intent_ = new Intent("com.example.mainactivity"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent_, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews contentiew = new RemoteViews(getPackageName(), R.layout.removeview); contentiew.setOnClickPendingIntent(R.id.button, pendingIntent); noti.contentView = contentiew; nm.notify(1, noti); |
위의 코드를 보면 RemoteViews의 객체를 통해 notification의 contentView를 바꿔치기 하는 것을볼 수 있다.
이 작업을 통해 Notification의 view를 바꿔 custom으로 제작 할 수 있게 된다.
여기서는 notification에 button을 추가하여 버튼 클릭시 동작 하도록 하였는데 이 때 필요한 작업이
아래와 같다.
1 2 3 4 5 6 | Intent intent_ = new Intent("com.example.mainactivity"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent_, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews contentiew = new RemoteViews(getPackageName(), R.layout.removeview); contentiew.setOnClickPendingIntent(R.id.button, pendingIntent);
|
contentView에서 button 클릭 이벤트를 받는 방법은 BroadcastReceiver을 통한 방법인데,
intent_에서 보내려는 action (여기서는 "com.example.mainactivity"가 그에 해당함)을 담아 pendingintent에 추가해주고
선언한 contentview에서 setOnClickPendingIntent(Resource ID, pendingintent instance); 함수를 통해
등록해준다 이렇게 등록을 해두고,
아래와 같이 BroadcastReceive를 등록해준다.
1 2 3 4 5 6 7 8 9 10 11 12 | BroadcastReceiver buttonBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "notification Button Clicked", Toast.LENGTH_LONG).show(); } }; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.example.mainactivity"); registerReceiver(buttonBroadcastReceiver, intent); |
이렇게 등록해두면 Notification에 Button을 누를 때마다
아래와 같이 "notification Button Clicked"라는 메세지가 toast가 된다.

이걸 응용하면 자신이 원하는 notification을 손쉽게 구현할 수 있다.
댓글을 달아 주세요