主要是檢測android通知欄的三種狀態的響應事件
這次在實現推送需求的時候,要用到android通知欄Notification點擊后進入消息頁面,因為要實現一個保存推送用戶名字的功能,我在點擊后處理了這個功能,但是測試發現我點擊刪除或者滑動清除后這個功能並沒有執行,所以才意識到要處理刪除和滑動清除的事件:
首先實現一個BroadcastReceiver
public class NotificationBroadcastReceiver extends BroadcastReceiver { public static final String TYPE = "type"; //這個type是為了Notification更新信息的,這個不明白的朋友可以去搜搜,很多 @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); int type = intent.getIntExtra(TYPE, -1); if (type != -1) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(type); } if (action.equals("notification_clicked")) { //處理點擊事件 } if (action.equals("notification_cancelled")) { //處理滑動清除和點擊刪除事件 } } }
而注冊Notification是這樣的:
Intent intentClick = new Intent(this, NotificationBroadcastReceiver.class); intentClick.setAction("notification_clicked"); intentClick.putExtra(NotificationBroadcastReceiver.TYPE, type); PendingIntent pendingIntentClick = PendingIntent.getBroadcast(this, 0, intentClick, PendingIntent.FLAG_ONE_SHOT); Intent intentCancel = new Intent(this, NotificationBroadcastReceiver.class); intentCancel.setAction("notification_cancelled"); intentCancel.putExtra(NotificationBroadcastReceiver.TYPE, type); PendingIntent pendingIntentCancel = PendingIntent.getBroadcast(this, 0, intentCancel, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle(getString(R.string.setting_gcm_title)) .setContentText(message) .setSound(defaultSoundUri) .setContentIntent(pendingIntentClick) .setDeleteIntent(pendingIntentCancel); notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(type /* ID of notification */, notificationBuilder.build()); //這就是那個type,相同的update,不同add
當然不要忘了在AndroidManifest.xml里面注冊
<receiver android:name=".gcm.NotificationBroadcastReceiver"> <intent-filter> <action android:name="notification_cancelled"/> <action android:name="notification_clicked"/> </intent-filter> </receiver>
這樣就是初步實現了android通知欄Notification點擊,取消,清除響應事件