Notification与广播的双厨狂喜

前言

其实这次写这个贴子,只是为了记录一下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进行通行,当然啦,一定要记得在配置文件中配置新的权限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值