您的位置:首页 > 移动开发 > Android开发

android Notification与BroadcastReceiver结合使用

2017-07-03 22:01 441 查看
NotificationUtils 类

public class NotificationUtils {
private static final String TAG = "NotificationUtils";
static int i = 0;
private static  int id = 1;

public static void setNotification(Context context, String content,String toUserId ) {

//        Intent intent = new Intent(Intent.ACTION_MAIN);
//        intent.addCategory(Intent.CATEGORY_LAUNCHER);
//        intent.setClass(MyApplication.getInstance(), MainActivity.class);
//        RxBus.getDefault().post(Constants.NOTIFICATION);

MilierLog.i(TAG,"setNotification***");
Intent intent = new Intent(MyApplication.getInstance(), NotificationClickReceiver.class);
intent.setAction("notification_clicked");
intent.putExtra(NotificationClickReceiver.TYPE, id);

MilierLog.i(TAG,"通知里toUserId is :"+toUserId);
Constants.TO_USER_ID = toUserId;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
//        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MyApplication.getInstance(), id++, intent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(context);
//        if (content.equals(context.getString(R.string.newMessage))) {
//            builder.setContent(new RemoteViews(context.getPackageName(), R.layout.layout_notification));
//        } else {
//            builder.setContent(new RemoteViews(context.getPackageName(), R.layout.layout_notification));
//        }
builder.setContentIntent(pendingIntent)//设置通知栏点击意图
.setContentTitle(content)
.setTicker(content)
.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
.setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
.setDefaults(Notification.DEFAULT_ALL)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合
.setSmallIcon(R.mipmap.ic_launcher);//设置通知小ICON
Notification notification = builder.getNotification();
notificationManager.notify(i++, notification);
}
}


重要的两点:

PendingIntent.getBroadcast(MyApplication.getInstance(), id++, intent, PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntent.getBroadcast的第四个参数设置于PendingIntent.FLAG_UPDATE_CURRENT

第二个参数区分注册的Intent

2.NotificationClickReceiver 类

public class NotificationClickReceiver extends BroadcastReceiver {
private static final String TAG = "NotificationClickReceiver";

public static final String TYPE = "type";

@Override
public void onReceive(Context context, Intent intent) {
//todo 跳转之前要处理的逻辑

String action = intent.getAction();
int type = intent.getIntExtra(TYPE, -1);

if (type != -1) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(type);
}

MilierLog.i(TAG,"action is :"+action);
if (action.equals("notification_clicked")) {
//处理点击事件
MilierLog.i(TAG,"NotificationClickReceiver***");
//            Intent newIntent = new Intent(context,    MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//            context.startActivity(newIntent);
RxBus.getDefault().post(Constants.NOTIFICATION);
}

if (action.equals("notification_cancelled")) {
//处理滑动清除和点击删除事件
}

}
}


AndroidManifest.xml中注册监听

<receiver android:name=".broadcast.NotificationClickReceiver">
<intent-filter>
<action android:name="notification_cancelled"/>
<action android:name="notification_clicked"/>
</intent-filter>
</receiver>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: