[详细]Android中广播、通知

广播按照注册方式可以划分为:
静态注册广播
在全局配置清单文件中注册

    <applicaiton>
         ...
           <receiver>
              <intent-filter>
                 <action android:name="接收广播的action字符串标记">
              </intent-filter>
           </receiver>
         ...
       </application>

动态注册广播

在代码中进行注册
IntentFilter filter=new IntentFilter();
filter.addAction(接收广播的action字符串标记);
registerReceiver(需要注册的广播接收器对象,IntentFilter意图过滤器对象)

根据广播的发送方式划分
普通广播 无序广播(广播发送时如果多个广播接收器都能接收该条广播 广播接收器接收广播的顺序未定义 )
sendBroadast(Intent意图对象 封装广播的action标记字符串以及传递的数据,接收该条广播需要的字符串权限可以为null);

有序广播(广播发送时如果多个广播接收器都能接收该条广播 广播接收器接收广播的顺序可以通过设置优先级确定 )
**sendOrderBroad**Cast(Intent意图对象 封装广播的action标记字符串以及传递的数据,接收该条广播需要的字符串权限可以为null);

 <Receiver>
    <intent-filter android:priority="0-1000之间的整数">
       <action android:name="">
    </intent-filter>
   <Receiver>

中断广播 abortBroadcast()

BroadCastReceiver广播接收器

它是一个在应用程序之间进行消息传递的应用程序组件
广播原理:
采用的订阅-发布的模式。 广播采取的是异步处理机制 默认情况下广播的发送方将广播标记后发出,
这时广播的发送方不需要等待回复消息可以继续向下执行,默认情况下所有的组件都具备接收和处理
广播的资格,哪个组件需要处理 就注册相应的标记即可。
接收系统广播 手机开机启动的系统广播

广播接收器的使用步骤:

1.创建一个类继承BroadcastReceiver
2.重写onReceive()方法 接收和处理广播
3.在清单文件中进行注册

public class LauchRecevier extends BroadcastReceiver{
    /**
     * 回调函数  表示当前的广播接收器接收到具体的广播时回调的函数
     * @param context  上下文
     * @param intent 意图对象  封装的广播的消息  sendBroadCast(Intent intent)
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        String action=intent.getAction();//获取回传intent对象中的action属性
        if(Intent.ACTION_BOOT_COMPLETED.equals(action)){
            Toast.makeText(context,"手机开机了!",Toast.LENGTH_LONG).show();
        }
    }
}

普通Notification三个必要属性

NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
builder.setContentTitle(“凤姐”);//设置通知的标题
builder.set**ContentText**(“一起吃饭谈谈结婚的事情!”);//设置通知的内容
builder.setSmallIcon(R.mipmap.ic_launcher);//设置通知的小图标

普通通知的设置非必要属性

//将资源中的图片封装成bitmap对象
Bitmap bm= BitmapFactory.decodeResource(getResources(),R.mipmap.dy_loadfail);
builder.setLargeIcon(bm);//设置大图标
builder.setWhen(System.currentTimeMillis());//设置通知发送时间 指定毫秒值
builder.setContentInfo(“99+”);

大视图通知:
1.大图片通知

NotificationCompat.BigPictureStyle bigPictureStyle=new NotificationCompat.BigPictureStyle();
Bitmap bm=BitmapFactory.decodeResource(getResources(),R.mipmap.dy_loadfail);
bigPictureStyle.bigPicture(bm);//设置大视图样式的大图
builder.setStyle(bigPictureStyle);

2.大文本通知

NotificationCompat.BigTextStyle bigTextStyle
=new NotificationCompat.BigTextStyle();
bigTextStyle.bigText(“其实这部分可以显示N多文本,时间关系,此处省略1万字……”);
builder.setStyle(bigTextStyle);

3.多行文本

NotificationCompat.InboxStyle inboxStyle
=new NotificationCompat.InboxStyle();
String[] strs={“android学习入门”,”android学习进阶”,”android学习高级”,”android学习宝典”,”android学习之禅”,”颈椎病康复宝典”};

    for(int i=0;i<strs.length;i++){
                  inboxStyle.addLine(strs[i]);
          }
          builder.setStyle(inboxStyle)

进度条通知

  /*
    setProgress(int max, int progress, boolean indeterminate)
     int max, 表示最大的进度
     int progress, 表示当前下载的进度
     boolean indeterminate 表示通知中进度条的状态 true表示只显示下载的状态 false则表示显示明确的下载进度
   */
   builder.setProgress(100,i,false);

    //PendingIntent 延迟的意图对象
    PendingIntent pi=PendingIntent.getActivity(this,1,
            new Intent(MainActivity.this,ResultActivity.class),
            PendingIntent.FLAG_ONE_SHOT);
    //设置点击通知时处理通知跳转界面
     builder.setContentIntent(pi);

    //构建通知的管理对象
    NotificationManager manager= (NotificationManager)
            getSystemService(Context.NOTIFICATION_SERVICE);
    //调用notify()方法发送通知   notify(int id 发送通知的唯一标示,发送的通知对象)
    manager.notify(1,builder.build());//builder.build() 获取构建notification通知对象
 /**
     * 点击按钮发送普通通知
     * @param view
     */
    public void sendNomal(View view){
         //创建构建通知对象
        NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
        //设置发送通知的必要属性
        builder.setContentTitle("凤姐");//设置通知的标题
        builder.setContentText("一起吃饭谈谈结婚的事情!");//设置通知的内容
        builder.setSmallIcon(R.mipmap.ic_launcher);//设置通知的小图标

        //将资源中的图片封装成bitmap对象
        Bitmap bm= BitmapFactory.decodeResource(getResources(),R.mipmap.dy_loadfail);
        builder.setLargeIcon(bm);//设置大图标
        builder.setWhen(System.currentTimeMillis());//设置通知发送时间  指定毫秒值
        builder.setContentInfo("99+");

        //PendingIntent 延迟的意图对象
        /*
        getActivity(Context context, int requestCode,Intent intent, @Flags int flags)
        Context context,  上下文
        int requestCode, 请求码  大于0的整数
        Intent intent,   意图对象 封装点击通知跳转的处理界面
         @Flags int flags  表示对象的创建方式
         */
        PendingIntent pi=PendingIntent.getActivity(this,1,
                new Intent(MainActivity.this,ResultActivity.class),
                PendingIntent.FLAG_ONE_SHOT);
        //设置点击通知时处理通知跳转界面
         builder.setContentIntent(pi);

        //构建通知的管理对象
        NotificationManager manager= (NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
        //调用notify()方法发送通知   notify(int id 发送通知的唯一标示,发送的通知对象)
        manager.notify(1,builder.build());//builder.build() 获取构建notification通知对象
    }
 /**
     * 点击按钮发送大视图通知
     * @param view
     */
    public void sendBig(View view){
        NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
        builder.setContentTitle("大视图通知标题");
        builder.setContentText("大视图通知内容");
        builder.setSmallIcon(R.mipmap.ic_launcher);

        //大视图样式
        //创建大图片样式对象
//        NotificationCompat.BigPictureStyle bigPictureStyle=new NotificationCompat.BigPictureStyle();
//        Bitmap bm=BitmapFactory.decodeResource(getResources(),R.mipmap.dy_loadfail);
//        bigPictureStyle.bigPicture(bm);//设置大视图样式的大图
        bigPictureStyle.setBigContentTitle("big title");
        bigPictureStyle.setSummaryText("big pic");
//        builder.setStyle(bigPictureStyle);//设置通知的样式

        //多文本样式
        NotificationCompat.BigTextStyle bigTextStyle=new NotificationCompat.BigTextStyle();
        bigTextStyle.bigText("其实这部分可以显示N多文本,时间关系,此处省略1万字......");
//        bigTextStyle.setBigContentTitle()
//        bigTextStyle.setSummaryText()
        builder.setStyle(bigTextStyle);

        //多行文本样式
        NotificationCompat.InboxStyle inboxStyle=new NotificationCompat.InboxStyle();
        String[] strs={"android学习入门","android学习进阶","android学习高级","android学习宝典",
                        "android学习之禅","颈椎病康复宝典"};
        for(int i=0;i<strs.length;i++){
            inboxStyle.addLine(strs[i]);
        }
        builder.setStyle(inboxStyle);

        PendingIntent pi=PendingIntent.getActivity(this,2,
                new Intent(MainActivity.this,ResultActivity.class),
                PendingIntent.FLAG_ONE_SHOT);
        builder.setContentIntent(pi);

        NotificationManager manager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(2,builder.build());
    }

    /**
     * 点击按钮发送进度条通知
     * @param view
     */
    public void sendProgress(View view){
        final NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
        builder.setContentTitle("下载提示");
        builder.setContentText("Loading...");
        builder.setSmallIcon(R.mipmap.dy_loadfail);
        final NotificationManager manager= (NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<=100;i+=5){
                    /*
                    setProgress(int max, int progress, boolean indeterminate)
                    int max, 表示最大的进度
                    int progress, 表示当前下载的进度
                    boolean indeterminate 表示通知中进度条的状态 true表示只显示下载的状态
                    false则表示显示明确的下载进度
                     */
                    builder.setProgress(100,i,false);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    manager.notify(3,builder.build());
                }
            }
        }).start();
    }

    /**
     * 点击按钮发送自定义通知
     * @param view
     */
    public void sendCustom(View view){
        NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
        builder.setContentTitle("标题");
        builder.setContentText("内容");
        builder.setSmallIcon(R.mipmap.dy_loadfail);

        /* 构造函数就可以将自定义的layout的xml文件转换成RemoteViews对象
        RemoteViews(String packageName, int layoutId)
        String packageName,  表示当前转换的布局xml文件所在的包名
        int layoutId 表示当前需要转换成RemoteViews对象的布局文件资源id
         */
        RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.custom_layout);
        remoteViews.setTextViewText(R.id.tv,"自定义通知");
        remoteViews.setImageViewResource(R.id.iv,R.mipmap.ic_launcher);
        builder.setContent(remoteViews);//设置定义通知的视图

        NotificationManager manager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(4,builder.build());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值