本文实例总结了Android编程中通知栏的用法。分享给大家供大家参考,具体如下:

很久没有使用Android的通知功能了,今天把两年前的代码搬出来一看,发现很多方法都废弃了,代码中各种删除线看的十分不爽。于是乎,打开Google,查看官方文档,学习最新的发送通知栏消息的方法。
本文中的代码均参照谷歌官方文档编写:
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
1.首先,获取系统的通知服务:
复制代码 代码如下:NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2.发送一个最简单的通知
public void simpleNotice(View view) {
//此Builder为android.support.v4.app.NotificationCompat.Builder中的,下同。
Builder mBuilder = new Builder(this);
//系统收到通知时,通知栏上面显示的文字。
mBuilder.setTicker("天津,晴,2~15度,微风");
//显示在通知栏上的小图标
mBuilder.setSmallIcon(R.drawable.consult_answer);
//通知标题
mBuilder.setContentTitle("天气预报");
//通知内容
mBuilder.setContentText("天津,晴,2~15度,微风");
//设置大图标,即通知条上左侧的图片(如果只设置了小图标,则此处会显示小图标)
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.share_sina));
//显示在小图标左侧的数字
mBuilder.setNumber(6);
//设置为不可清除模式
mBuilder.setOngoing(true);
//显示通知,id必须不重复,否则新的通知会覆盖旧的通知(利用这一特性,可以对通知进行更新)
nm.notify(1, mBuilder.build());
}
3.删除一个通知。参数即为通知的id
nm.cancel(1);
4.发送一个通知,点击通知后跳转到一个Activity,从这个Activity返回后,进入程序内的某一个页面(一般为主页)
//点击通知进入一个Activity,点击返回时进入指定页面。
public void resultActivityBackApp(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题2");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知标题2");
mBuilder.setContentText("点击通知进入一个Activity,点击返回时进入指定页面。");
//设置点击一次后消失(如果没有点击事件,则该方法无效。)
mBuilder.setAutoCancel(true);
//点击通知之后需要跳转的页面
Intent resultIntent = new Intent(this, ResultActivityBackApp.class);
//使用TaskStackBuilder为“通知页面”设置返回关系
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
//为点击通知后打开的页面设定 返回 页面。(在manifest中指定)
stackBuilder.addParentStack(ResultActivityBackApp.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pIntent);
// mId allows you to update the notification later on.
nm.notify(2, mBuilder.build());
}
同时,需要在manifest中为点击通知后打开的Activity指定父Activity.
<activity
android:name=".ResultActivityBackApp"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
(其中,activity的属性parentActivityName为API 16中的属性,meta-data中的代码为兼容API 16以下。因此,对于大多数程序,这两个地方都得写。)
5.和上述4类似,只是在打开的Activity中返回时回到home页
//点击通知进入一个Activity,点击返回时回到桌面
public void resultActivityBackHome(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题3");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知标题3");
mBuilder.setContentText("点击通知进入一个Activity,点击返回时回到桌面");
//设置点击一次后消失(如果没有点击事件,则该方法无效。)
mBuilder.setAutoCancel(true);
Intent notifyIntent = new Intent(this, ResultActivityBackHome.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pIntent);
nm.notify(3, mBuilder.build());
}
6.带进度条的通知
public void progressNotice(View view) {
final Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题4");
mBuilder.setContentTitle("Picture Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_launcher);
// Start a lengthy operation in a background thread
new Thread(new Runnable() {
@Override
public void run() {
int progress;
for (progress = 0; progress <= 100; progress++) {
// Sets the progress indicator to a max value, the current completion percentage,
// and "determinate" state
mBuilder.setProgress(100, progress, false);
//不明确进度的进度条
// mBuilder.setProgress(0, 0, true);
nm.notify(4, mBuilder.build());
// 模拟延时
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// When the loop is finished, updates the notification
mBuilder.setContentText("Download complete");
// Removes the progress bar
mBuilder.setProgress(0, 0, false);
nm.notify(4, mBuilder.build());
}
}
).start();
}
7.扩展布局的通知。按住通知条下滑,可以查看更详细的内容
public void expandLayoutNotice(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题5");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知标题5");
mBuilder.setContentText("按住通知下拉可显示扩展布局");
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] events = new String[]{"Beijing", "Tianjin", "Shanghai", "Guangzhou"};
// 设置扩展布局的标题
inboxStyle.setBigContentTitle("Event tracker details:");
for (String s : events) {
inboxStyle.addLine(s);
}
mBuilder.setStyle(inboxStyle);
nm.notify(5, mBuilder.build());
}
8.自定义布局的通知栏。(根据谷歌的官方文档不推荐这么做,因为使用这种方式时,对不同屏幕进行适配需要考虑的因素太多。而且,通知栏应该展示的就是最简明扼要的信息,对于大多数程序默认的布局已经足够了。)
//自定义布局的通知
public void customLayoutNotice(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知标题6");
mBuilder.setTicker("通知标题6");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_layout_notice);
mBuilder.setContent(remoteViews);
//为RemoteViews上的按钮设置文字
remoteViews.setCharSequence(R.id.custom_layout_button1, "setText", "Button1");
remoteViews.setCharSequence(R.id.custom_layout_button2, "setText", "Button2");
//为RemoteViews上的按钮设置点击事件
Intent intent1 = new Intent(this, CustomLayoutResultActivity.class);
intent1.putExtra("content", "From button1 click!");
PendingIntent pIntentButton1 = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.custom_layout_button1, pIntentButton1);
Intent intent2 = new Intent(this, CustomLayoutResultActivity.class);
intent2.putExtra("content", "From button2 click!");
PendingIntent pIntentButton2 = PendingIntent.getActivity(this, 1, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.custom_layout_button2, pIntentButton2);
nm.notify(6, mBuilder.build());
}
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 通知栏
# Android 8.0系统中通知栏的适配微技巧
# Android通知栏微技巧一些需要注意的小细节
# Android编程实现通知栏进度条效果的方法示例
# Android开发实现判断通知栏是否打开及前往设置页面的方法
# Android之开发消息通知栏
# 详解Android通知栏沉浸式/透明化完整解决方案
# 关于Android中点击通知栏的通知启动Activity问题解决
# Android编程实现上方通知栏里闪动效果的方法
# Android 使用AlarmManager和NotificationManager来实现闹钟和通知
# android使用NotificationListenerService监听通知栏消息
# Android种使用Notification实现通知管理以及自定义通知栏实例(示例四)
# Android 8.0系统中通知栏的适配详解
# 小图标
# 如果没有
# 天津
# 自定义
# 文档
# 则该
# 进阶
# 进度条
# 栏上
# 这一
# 太多
# 相关内容
# 简明扼要
# 感兴趣
# 这两个
# 给大家
# 跳转
# 这么做
# 都得
# 设置为
相关文章:
如何在阿里云完成域名注册与建站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
网站设计制作企业有哪些,抖音官网主页怎么设置?
建站168自助建站系统:快速模板定制与SEO优化指南
网站好制作吗知乎,网站开发好学吗?有什么技巧?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何设置并定期更换建站之星安全管理员密码?
jQuery 常见小例汇总
,巨量百应是干嘛的?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
网站制作说明怎么写,简述网页设计的流程并说明原因?
网站制作公司排行榜,四大门户网站排名?
为什么Go需要go mod文件_Go go mod文件作用说明
如何在IIS服务器上快速部署高效网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何通过商城自助建站源码实现零基础高效建站?
如何制作一个表白网站视频,关于勇敢表白的小标题?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在万网开始建站?分步指南解析
如何用花生壳三步快速搭建专属网站?
如何安全更换建站之星模板并保留数据?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
建站之星代理商如何保障技术支持与售后服务?
移民网站制作流程,怎么看加拿大移民官网?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何快速搭建二级域名独立网站?
如何彻底卸载建站之星软件?
建站之星安装后如何配置SEO及设计样式?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
在线制作视频网站免费,都有哪些好的动漫网站?
建站DNS解析失败?如何正确配置域名服务器?
如何用免费手机建站系统零基础打造专业网站?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
5种Android数据存储方式汇总
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
如何在阿里云ECS服务器部署织梦CMS网站?
如何在阿里云域名上完成建站全流程?
定制建站流程解析:需求评估与SEO优化功能开发指南
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何在景安服务器上快速搭建个人网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何零基础在云服务器搭建WordPress站点?
在线制作视频的网站有哪些,电脑如何制作视频短片?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
香港网站服务器数量如何影响SEO优化效果?
*请认真填写需求信息,我们会在24小时内与您取得联系。