android ——通知管理
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendNotice = (Button) findViewById(R.id.button);
sendNotice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(MainActivity.this,NoticeActivity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是一个标题")
.setContentText("这是一个内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pi)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.build();
manager.notify(1,notification);
}
});
}
}
这一个较为完整的通知,首先呢:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
获取了一个NotificationManager的实例,NotificationManager是一个管理通知的类,可以通过getSystemService()方法来获取到,参数是用于确定获取系统的那个服务的一个字符串。
然后,使用了一个Buider构造器来创建一个notification对象,一般的使用方法如下:
Notification notification = new NotificationCompat.Builder(context).build();
这个代码只是创建了一个空的notification对象,可以在build()之连缀使用多个设置方法设置icon、文字、提示声音、振动等等参数。比如:
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是一个标题")
.setContentText("这是一个内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pi)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.build();
其中:
setContentTitle()方法用于指定通知的标题内容;
setContentText()方法用于指定通知的正文内容;
setWhen()方法会在通知上显示通知被创建的时间(System.currentTimeMillis()这个方法将返回时间,以毫秒为单位);
setSmallIcon()用于指定小图标,不过这里只能使用纯alpha图层的图片,这个图标将显示在状态栏没有下拉的状态栏上;
setLargeIcon()用于指定大图标,下拉状态栏的时候就能看到大图标了
setContentIntent()这里传入一个PendingIntent类的对象用于指定点击通知后的相应。
setDefaults()这里指定了当通知显示的时候的效果,它会根据手机的环境来决定播放什么铃声,和如何振动。
最后:
manager.notify(1,notification);
使用NotificationManager的notify()方法让通知显示出来,第一个参数是一个id,要保证每个通知的id不同,第二个参数就是设置好的notification对象
具体效果就是:

想要实现点击的效果就需要一个PendingIntent类,它主要提供几种静态方法实现获取PendingIntent的实例,根据需求分别是getActivity(),getBroadcast(),getService(),比如这里使用的是:
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
getActivity(),getBroadcast(),getService()这三个方法的参数都是一个的,第一个参数是context,第二个通常是0,第三个是一个Intent对象,通过这个Intent对象可以构建出PendingIntent的意图,第四个参数用于确定PendingIntent的行为,通常有四种值可以选:
FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。
FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。
FLAG_ONE_SHOT:该PendingIntent只作用一次。在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException。
FLAG_UPDATE_CURRENT:如果系统中有一个和你描述的PendingIntent对等的PendingInent,那么系统将使用该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。
这里使用0即可。
Intent intent = new Intent(MainActivity.this,NoticeActivity.class);
这里传入的intent对象是这样一个启动NoticeActivity活动的,所以点击通知时会启动NoticeActivity活动。
对于通知的设置还可以在build()之使用这些方法:
1、播放声音
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ohh")))
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ohh")))
这个用于设置通知的声音;
2、振动
.setVibrate(new long[] {0, 1000, 1000, 1000})
这个用于设置通知的振动的参数是一个长整型的数组,下标0的值表示通知到来时手机静止的时长,下标1的值表示手机振动的时长,下标2的值又表示手机振动的时长,以此类推。通知这里表示通知到来时手机立即振动1秒,然后停止1秒,然后再振动1秒。
想要振动还需要权限
<uses-permission android:name="android.permission.VIBRATE"/>
3、LED
.setLights(Color.GREEN,1000,1000)
这个是设置通知到来时手机的LED灯,第一个参数是指定颜色,第二个参数指定亮起的时长,第二个是暗去的时长。
4、取消通知
.setAutoCancel(true)
这个是点击这个通知后这个通知就消失。这里还能调用NotificationManager的cacel()方法显式的取消这个通知,比如在这里可以在这个通知启动的活动中设置一个按钮然后调用这个方法,具体就是:
public class NoticeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notice);
final NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Button cacnel = (Button) findViewById(R.id.cancel);
cacnel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
manager.cancel(1);
}
});
}
}
manager.cancel(1)里面的参数就是通知的id。
5、大文本和大图片
.setContentText("这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容")
.setContentText()使用这个方法显示一个长文本的时候会显示不全。

这时候就需要使用setstyle()方法:
setStyle(new NotificationCompat.BigTextStyle().bigText("这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容这是一个内容"))
这里创建了一个NotificationCompat.BigTextStyle()对象,这个对象适用于封装长文本信息的,然后调用他的bigText()方法将文字内容传入。
与之类似,还可以显示一张大图片:
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.image_1)))
NotificationCompat.BigPictureStyle()这个对象用于设置大图片,然后调用它的bigPicture()方法将图片传入,然后通过调用BitmapFactory的decodeResource方法将图片解析为Bitmap对象。
6、通知的重要程度
通知的重要程度使用setPriority()方法,通常有个整型的常量值可选:PRIORITY_DEFAULT这是一个默认的重要程度,和不设置一样;PRIORITY_MIN,这表示系统旨在特定的情况才显示,比如下拉的时候;PRIORITY_LOW,系统可能会缩小这个通知,改变它的顺序,将其排在重要的通知的后面;PRIORITY_HIGH,会被系统放大,改变其顺序,将其排在比较靠前的位置;PRIORITY_MAX是最高的重要程度,系统会立即显示。比如:
.setPriority(NotificationCompat.PRIORITY_MAX)

当重要程度达到MAX时系统会弹出一个横幅立即显示这条通知,不过如果使用小米手机的话要自行开启悬浮通知的权限。。
android ——通知管理的更多相关文章
- android 的通知管理
1在context里定义通知管理器(NotificationManager) NotificationManager notificationManager = (NotificationManage ...
- Xamarin.Android通知详解
一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...
- Android线程管理之ThreadPoolExecutor自定义线程池
前言: 上篇主要介绍了使用线程池的好处以及ExecutorService接口,然后学习了通过Executors工厂类生成满足不同需求的简单线程池,但是有时候我们需要相对复杂的线程池的时候就需要我们自己 ...
- android通知-Notification
android中,当app需要向发送一些通知,让使用者注意到你想要告知的信息时,可以用Notification.下面,就来讨论一下,Notification的用法,我们从实际的小例子来进行学习. 1. ...
- Android线程管理(二)——ActivityThread
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- Android 核心分析之十三Android GWES之Android窗口管理
Android GWES之Android窗口管理1基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Wi ...
- Android窗口管理服务WindowManagerService显示窗口动画的原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8611754 在前一文中,我们分析了Activi ...
- Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...
- Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...
随机推荐
- NEST 6.X升级到7.X
升级比对可访问 NEST 6.X升级到7.X 查看 ElasticClient-CreateIndex 升级前代码,NEST版本6.6.0 ICreateIndexResponse response ...
- RestTemplate真实案例
1. 场景描述 现在越来越的系统之间的交互采用http+json的交互方式,以前用的比较多的HttpClient,后来用的RestTemplate,感觉RestTemplate要比httpClent简 ...
- free()函数释放一段分配的内存之陷阱
朋友们对malloc函数应该是比较熟悉了,此函数功能是分配一段内存地址,并且将内存地址给一个指针变量,最后记得再调用free函数释放这段内存地址就可以了,标准的流程对吧,好像没什么问题.但是按照此标准 ...
- 【基础算法-模拟-例题-金币】-C++
原题链接:P2669 金币 这道题目完全是一道模拟题,只要按照题目中的加金币的算法和sum累加就可以很轻易得出最终答案. 说一下有一些点需要注意: 1.用i来计每天发的金币数,n来计已经拿了金币的天数 ...
- youku_androidid
youku_androidid = 1310; imei screenwidth screenhight
- 【Go】类似csv的数据日志组件设计
原文链接:https://blog.thinkeridea.com/201907/go/csv_like_data_logs.html 我们业务每天需要记录大量的日志数据,且这些数据十分重要,它们是公 ...
- C语言入门4-运算符和表达式
一. 分类 C语言一共有34种运算符,10种运算类型,本节我们要掌握的有( 7 种) 算术运算符(+.-.*./.%). 关系运算符(>.>=.==.!=.<.<=). ...
- [leetcode] 11. Container With Most Water (medium)
原题链接 以Y坐标长度作为木桶边界,以X坐标差为桶底,找出可装多少水. 思路: 前后遍历. Runtime: 5 ms, faster than 95.28% of Java class Soluti ...
- jenkins默认在build结束后会kill掉所有的衍生进程
在使用jenkins进行自动化部署服务的过程中,发现调用服务器的shell命令无法正常启动tomcat,但是构建日志显示是成功执行的,而手动在服务器却是可以正常启动tomcat. 原因:jenkins ...
- 最短代码实现包含100个key的字典,且每个value值不同
最短代码实现包含100个key的字典,且每个value值不同 {x:x*2 for x in range(100)}