前言
其实这次写这个贴子,只是为了记录一下Notification的不同版本之间的使用,但是想着有点单调就加多一个广播进行知识点的巩固吧。
首先是UI的界面由于太简单就不过多展示了,简单来说就是实现了点击一个按钮然后发送广播,广播接收之后出现Notification。
创建广播接受器
其实也没什么好说的,先把代码贴上来,再讲讲里面的一些点。
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
//首先创建一个notficationmanager
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//创建notification的builder
Notification.Builder builder = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
builder = new Notification.Builder(context,"0*123");
NotificationChannel firstchannel = new NotificationChannel("111", "firstchannel", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(firstchannel);
builder.setChannelId("111");
}
else {
builder=new Notification.Builder(context);
}
builder.setContentTitle("来自广播的提醒");
builder.setContentText("点击回到主页面");
Intent goHomeIntent = new Intent(Intent.ACTION_MAIN);
builder.setContentIntent(PendingIntent.getActivity(context,0,goHomeIntent,0));
builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
builder.setSmallIcon(R.mipmap.ic_launcher);
Notification build = builder.build();
build.flags|=Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(002,build);
}
}
首先对于这个广播,我准备使用动态注册的方式,便不在manifest.xml中进行静态的注册了。首先对于上面代码,其实就是广播接收器的一个简单运用,我在onReceive中进行创建Notification的操作,以做到接受到相对应的广播便相应Notification。这里我们着重看一下Notification创建的步骤。
Notification创建的大体步骤
1.其实首先就需要通过context.getSystemService(Context.NOTIFICATION_SERVICE)这个语句进行创建NotificationManage
2.其次就是要创建一个Notification.Builder创建一个Builder对象,当然这个要根据版本进行一个判断
3.在通过builder设置好Notification的一些内容后,我们便可以通过builder创建出Notification对象,然后通过NotificationManage搭载进行一个显示
创建时需要注意的点
其实主要需要注意的点就是集中在第二点步骤,由于现在安卓版本迭代事件太快了,所以在创建builder的时候要根据不同版本进行创建。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
builder = new Notification.Builder(context,"0*123");
NotificationChannel firstchannel = new NotificationChannel("111", "firstchannel", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(firstchannel);
builder.setChannelId("111");
}
else {
builder=new Notification.Builder(context);
}
可以看到上面的代码有对版本有一个判断,如果版本号大于o的话,还要另外创建一个channel对象,并将这个对象赋值到builder中。
注册广播接收器
这里就没有特别多好说的,就是按照动态注册的进行。以下的代码只是将核心代码给码出来,其他的就不多复制啦
//创建一个按钮实现notification和广播结合
private Button notifyAndBroadcastBtn;
private final String BROADCAST_ATION="com.yjs.notificationbroadcast";
//注册广播接收器
private void registerBroadcastReceive() {
IntentFilter intentFilter = new IntentFilter(BROADCAST_ATION);
NotificationReceiver notificationReceiver = new NotificationReceiver();
registerReceiver(notificationReceiver,intentFilter);
}
//发送广播
case R.id.notifyandbroadcastbtn:
//发送一个广播出去
Intent intent8 = new Intent(BROADCAST_ATION);
sendBroadcast(intent8);
break;
自此一个广播+Notification的demo完成啦!
题外话——说说广播的理解
首先广播有本地广播和标准广播,再往里面分还有有序广播等细分广播。
对于广播接收器有两种接收方式,首先是静态注册与动态注册,而静态注册简单来说就是在manifest中进行注册,动态则为在代码中注册
其实这个区分还是很简单的,我不知道为什么一直理解不了,但是我现在绝对是已经理解透。
说一下理解的大体流程吧
首先我如果要使用广播首先都是要注册广播,这里面注册分为静态注册跟动态注册。我们这边暂时只考虑动态注册。
首先是注册的话更多使用intentfilter去进行动态注册。如果注册的是系统广播,那么当系统发出对应的广播,
app就会接收到对应的广播并做出之前设定的动作。如果注册的是自定义的广播,我们便可以进行发送,一般发送我们用的是
intent进行通行,当然啦,一定要记得在配置文件中配置新的权限。