[详细]Android中广播、通知
2016-10-14 21:56
246 查看
广播按照注册方式可以划分为:
静态注册广播
在全局配置清单文件中注册
动态注册广播
在代码中进行注册
IntentFilter filter=new IntentFilter();
filter.addAction(接收广播的action字符串标记);
registerReceiver(需要注册的广播接收器对象,IntentFilter意图过滤器对象)
根据广播的发送方式划分
普通广播 无序广播(广播发送时如果多个广播接收器都能接收该条广播 广播接收器接收广播的顺序未定义 )
sendBroadast(Intent意图对象 封装广播的action标记字符串以及传递的数据,接收该条广播需要的字符串权限可以为null);
有序广播(广播发送时如果多个广播接收器都能接收该条广播 广播接收器接收广播的顺序可以通过设置优先级确定 )
**sendOrderBroad**Cast(Intent意图对象 封装广播的action标记字符串以及传递的数据,接收该条广播需要的字符串权限可以为null);
中断广播 abortBroadcast()
BroadCastReceiver广播接收器
它是一个在应用程序之间进行消息传递的应用程序组件
广播原理:
采用的订阅-发布的模式。 广播采取的是异步处理机制 默认情况下广播的发送方将广播标记后发出,
这时广播的发送方不需要等待回复消息可以继续向下执行,默认情况下所有的组件都具备接收和处理
广播的资格,哪个组件需要处理 就注册相应的标记即可。
接收系统广播 手机开机启动的系统广播
广播接收器的使用步骤:
1.创建一个类继承BroadcastReceiver
2.重写onReceive()方法 接收和处理广播
3.在清单文件中进行注册
普通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学习之禅”,”颈椎病康复宝典”};
进度条通知
静态注册广播
在全局配置清单文件中注册
<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()); }
相关文章推荐
- 一个AndroidDemo(百分比 照片 广播 通知 沉浸式标题栏 对话 退出 .9 聊天等等)
- 【Android核心基础07】 - 广播接收者和通知
- Android 用户界面---广播通知(Toast Notifications)
- Android 广播、服务、数据库、通知、包原理
- Android 用户界面---广播通知(Toast Notifications)
- android 随手记 广播通知栏 三
- android BroadcastReceiver详细讲解1-自带的广播接受器-拨号、短信、卸载/安装、开机启动
- Android 用户界面---广播通知(Toast Notifications)
- Android 广播 通知 带振动 声音
- android 广播接收器之通知栏页面跳转
- Android中使用Notification并通过点击Notification启动启动通知详细Activity,点击返回键和按钮返回主界面
- Android中的广播(BroadCast)详细介绍
- Android广播接收机制详细介绍(附短信接收实现)
- Android进阶之路 - BroadcaseReceiver(自定义广播、有序广播、无序广播、广播拦截、动态注册、静态注册)的详细使用方式
- Android消息推送(广播机制)+通知
- android 随手记 广播通知栏 二
- Android 广播、服务、数据库、通知、包原理及描述
- Android 通知PendingIntent意图发送广播,但Intent数据无更新? 解决方法
- android四大组件之一广播notification(通知)的Title模拟下载
- Android用观察者模式代替广播通知刷新界面