NotificationManager 通知栏(自调用)
来源:互联网 发布:在线下单系统源码 编辑:程序博客网 时间:2024/06/07 06:01
android ——通知管理
1 public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 Button sendNotice = (Button) findViewById(R.id.button); 9 10 sendNotice.setOnClickListener(new View.OnClickListener() {11 @Override12 public void onClick(View view) {13 14 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);15 16 Intent intent = new Intent(MainActivity.this,NoticeActivity.class);17 PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);18 19 Notification notification = new NotificationCompat.Builder(MainActivity.this)20 .setContentTitle("这是一个标题")21 .setContentText("这是一个内容")22 .setWhen(System.currentTimeMillis())23 .setSmallIcon(R.mipmap.ic_launcher)24 .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))25 .setContentIntent(pi)26 .setDefaults(NotificationCompat.DEFAULT_ALL)27 .build();28 manager.notify(1,notification);29 }30 });31 }32 }
这一个较为完整的通知,首先呢:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
获取了一个NotificationManager的实例,NotificationManager是一个管理通知的类,可以通过getSystemService()方法来获取到,参数是用于确定获取系统的那个服务的一个字符串。
然后,使用了一个Buider构造器来创建一个notification对象,一般的使用方法如下:
Notification notification = new NotificationCompat.Builder(context).build();
这个代码只是创建了一个空的notification对象,可以在build()之连缀使用多个设置方法设置icon、文字、提示声音、振动等等参数。比如:
1 Notification notification = new NotificationCompat.Builder(MainActivity.this)2 .setContentTitle("这是一个标题")3 .setContentText("这是一个内容")4 .setWhen(System.currentTimeMillis())5 .setSmallIcon(R.mipmap.ic_launcher)6 .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))7 .setContentIntent(pi)8 .setDefaults(NotificationCompat.DEFAULT_ALL)9 .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时系统会弹出一个横幅立即显示这条通知,不过如果使用小米手机的话要自行开启悬浮通知的权限。
- NotificationManager 通知栏(自调用)
- android NotificationManager 通知栏
- android NotificationManager:通知栏
- Android 通知栏NotificationManager设置
- 自定义语音通知栏 NotificationManager
- Android NotificationManager与Notification(通知栏) 的使用
- NotificationManager 通知
- NotificationManager 通知
- android Notification通知消息学习(NotificationManager)
- Android闹钟AlarmManager-通知NotificationManager-自定义通知栏
- [控件]NotificationManager提示通知
- android 通知NotificationManager
- Android 通知栏 NotificationManager和Notification的使用总结
- android的NotificationManager的使用,快捷通知栏
- Android中的消息通知(NotificationManager和Notification)
- Android中的消息通知(NotificationManager和Notification)
- Android中的消息通知(NotificationManager和Notification)
- Android中的消息通知(NotificationManager和Notification)
- Apache实现反向代理和负载均衡
- 【工业智能】从人工智能到工业智能,和工业智能化转型的三个路径
- 剑指offer—反转链表
- Java中sleep()与wait()区别
- ArUco----一个微型现实增强库的介绍及视觉应用(一)
- NotificationManager 通知栏(自调用)
- 28 H5上rtl8189ftv wifi驱动移植
- Idea的spring工程里,经常会遇到Could not autowire. No beans of 'xxxx' type found的错误提示
- 吴恩达 深度学习第三周 浅层神经网络 logistic_regression python代码实现
- 6种排序的lua实现
- dig命令-dns查询
- java.lang.NoClassDefFoundError: com/netflix/hystrix/contrib/javanica/aop/aspectj/HystrixCommandAspec
- VS2010编写COM组件提供PHP调用
- Android 系统源码修改键盘的默认主题样式