之前寫了一篇關于notification通知的文章
鏈接:http://www.lxweimin.com/p/ba8e6a4f023c
如果要捕獲通知的點擊,要怎么辦。監聽通知點擊事件,沒有對應的API。
做法就是通過廣播。
上一篇文章是通過PendingIntent.getActivity來創建PendingIntent,配置intent可以直接跳轉activity。現在通過PendingIntent.getBroadcast來創建PendingIntent。當點擊了這個通知,會發送一個廣播,我們可以通過靜態注冊對應的廣播接受者來接受,然后自己處理邏輯。
步驟1:寫廣播類以及靜態注冊
public class NotificationBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
UMUtils.getInstace()._frequency(context, "id_121");
Bundle bundle = intent.getExtras();
Class activity = (Class) bundle.getSerializable("class");
Intent mIntent = new Intent(context, activity);
mIntent.putExtras(bundle);
mIntent.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
);
context.startActivity(mIntent);
}
}
在AndroidManifest注冊
<receiver android:name=".receivers.NotificationBroadcastReceiver"></receiver>
步驟2:編寫通知
普通通知:
/**
* 顯示普通通知
*
* @param mActivity
* @param mBundle
*/
private void showCommonNotification(Class<?> mActivity, Bundle mBundle, String title, String content) {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context);
builder.setSmallIcon(R.mipmap.app_icon);
builder.setContentTitle(title);
builder.setContentText(Html.fromHtml(content));
builder.setAutoCancel(true).setDefaults(
NotificationCompat.DEFAULT_VIBRATE
| NotificationCompat.DEFAULT_SOUND
);
Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
mBundle.putSerializable("class", mActivity);
intent.putExtras(mBundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
Notification n = builder.build();
NotificationManagerCompat managerCompat =
NotificationManagerCompat.from(context);
managerCompat.notify((int) System.currentTimeMillis(), n);
}
橫幅通知:
/**
* 顯示橫幅通知
*
* @param mActivity
* @param mBundle
* @param
*/
private void showHangup(Class<?> mActivity, Bundle mBundle, String title, String content) {
NotificationManager manger = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentTitle(title);
builder.setContentText(Html.fromHtml(content));
builder.setDefaults(NotificationCompat.DEFAULT_ALL);
builder.setSmallIcon(R.mipmap.ielts_bro_app_icon);
mBundle.putSerializable("class", mActivity);
Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
intent.putExtras(mBundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
builder.setFullScreenIntent(pendingIntent, true);
builder.setAutoCancel(true);
Notification notification = builder.build();
manger.notify((int) System.currentTimeMillis(), notification);
}