一:Notification的简介== Notification是显示在手机状态栏的通知,手机状态栏位于手机屏幕的最上方,那里一般 显示了手机当前的网络状态,电池状态,时间等。 Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification.Android3.0增加Notification.Builder类,通过该类允许开发者更轻松地创建Notification对象。 二:Notification使用的步骤: a)获取NotificationManager对象 NotificationManager nm=getSystemService(NOTIFICATION_SERVICE); b)创建Notification对象,有如下步骤: 1)获取Notification.Builder对象 2)调用Notification.Builder的setXXX方法设置属性. 其中的属性并不是全部设置,但是必须设置三项 setSmallIcon(),setContentText(),setCotentTitle()。 3)调用Notification.Builder的build方法创建Notification对象(Android API 16之后) c)通过NotificationManager发送Notification nm.notify(index,Notification); 注意:取消通知nm.cancel(index) 1)常用的属性方法: setContentText():设置通知内容 setSamllIcon():为通知设置小图标 setContentTitle():设置通知标题 builder.setTicker(“这是一条新闻通知"); 设置通知在状态栏里面的标题 setLargeIcon():为通知设置大图标,使用BitmapFactory创建图片。 Bitmapbtm=BitmapFactory.decodeResource(getResources(),R.drawable.msg); setWhen(System.currentTimeMillis())设置时间 setContentIntent():设置点击通知后将要启动的程序组件对应的PendingIntent。 setAutoCancel():设置点击通知后,状态自动删除通知 setContentInfo()设置通知信息 2)设置提示响应方法: setDefaults():设置通知为默认音效、振动、闪屏. Notification.DEFAULT_SOUND:使用默认声音 Notification.DEFAULT_VIBRATE:设置默认振动 Notification.DEFAULT_LIGHTS:设置使用默认闪光灯 Notification.DEFAULT_ALL:设置使用默认声音,振动,闪光灯 setSound(Uri.parse("file:///sdcard/apple.mp3")):设置自定义声音 setVibrate(newlong[]{1000,5000,1000,3000}):设置自定义振动.时长的单位是毫秒.数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长..] setLights(intargb, int onMs, int offMs):设定前置LED灯的闪烁速率,持续毫秒数,停顿毫秒数 注意:需要添加闪光灯和振动器的权限 android.permission.FALSHLIGHT android.permission.VIBRATE 3)进度条样式的通知: setProgress(intmax,int progress,boolean indeterminate)方法用于设置进度条, max用于设定进度的最大数, progress用于设定当前的进度,= indeterminate用于是否是一个确定进度值的进度条。 通过indeterminate的设置,可以实现两种不同样式的进度条,一种是有进度的(false),一种是循环流动的(true)。 3)Notification视觉风格: Notification有两种视觉风格, 一种是标准视图(Normalview)、一种是大视图(Big view)。标准视图在Android中各版本是通用的,但是对于大视图而言,仅支持Android4.1+的版本。 从官方文档了解到,一个标准视图显示的大小要保持在64dp高, 宽度为屏幕标准。标准视图的通知主体内容有一下几个p1.png; a)通知标题。 b)大图标。 c)通知内容。 d)通知消息。 e)小图标。 f)通知的时间,一般为系统时间,也可以使用setWhen()设置. 而对于大视图(Big View)而言,它的细节区域只能显示256dp高度的内容,并且只对Android4.1+之后的设备才支持,使用NotificationCompat.Builder来创建通知和设置通知的属性。 它比标准视图不一样的地方, 均需要使用setStyle()方法设定,它大致的效果如p2.png: setStyle()传递一个NotificationCompat.Style对象,它是一个抽象类,Android为我们提供了三个实现类,用于显示不同的场景。分别是: NotificationCompat.BigPictureStyle,在细节部分显示一个256dp高度的位图。 NotificationCompat.BigTextStyle,在细节部分显示一个大的文本块。 NotificationCompat.InboxStyle,在细节部分显示一段行文本。   如果仅仅显示一个图片,使用BigPictureStyle是最方便的; 如果需要显示一个富文本信息,则可以使用BigTextStyle; 如果仅仅用于显示一个文本的信息,那么使用InboxStyle即可。 后面会以一个示例来展示InboxStyle的使用, 该内部类中的方法addLine()添加一行 setBigContentTitle:设置标题 setSummaryText:设置落名 4)自定义通知: setContent(RemoteViewsview)可以自定义view. 但是对于通知而言,因为它的全局性,并不能简单的通过inflate获取出一个View,因为可能触发通知的时候,响应的App已经关闭,无法获取当指定的XML布局文件。所以需要使用单独的一个RemoteViews类来操作。 RemoteViews,描述了一个视图层次的结构,可以显示在另一个进程。层次结构也是从布局文件中“获取”出一个视图,这个类,提供了一些基本的操作求改其布局的内容。 RemoteViews提供了多个构造函数,一般使用RemoteViews(String packageName,intlayoutId)。 第一个参数为包的名称,第二个为layout资源的Id。 当获取到RemoteViews对象之后,可以使用它的一系列setXxx()方法通过控件的Id设置控件的属性。 简单代码示例: MainActivity.Java [java] view plain copy 01.package com.example.notification; 02. 03.import android.app.Activity; 04.import android.app.Notification; 05.import android.content.Intent; 06.import android.graphics.Bitmap; 07.import android.graphics.BitmapFactory; 08.import android.app.NotificationManager; 09.import android.app.PendingIntent; 10.import android.os.Bundle; 11.import android.view.View; 12. 13.public class MainActivity extends Activity { 14. 15. private NotificationManager nm; 16. @Override 17. protected void onCreate(Bundle savedInstanceState) { 18. super.onCreate(savedInstanceState); 19. setContentView(R.layout.activity_main); 20. nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 21. 22. } 23. 24. public void btn(View view){ 25. Notification.Builder builder = new Notification.Builder(this); 26. //小图标 27. builder.setSmallIcon(R.drawable.ic_launcher); 28. //主标题 29. builder.setContentTitle("xxxx标题"); 30. //内容 31. builder.setContentText("据美联社报道,xxxx将于26日出访珍珠港,垃圾一个,说xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 32. //提示的信息 33. builder.setTicker("nihao"); 34. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 35. //右下的小图标 36. builder.setLargeIcon(bitmap); 37. //时间设置 38. builder.setWhen(System.currentTimeMillis()); 39. //右下的新闻 40. builder.setContentInfo("新闻"); 41. //声音 42. builder.setDefaults(DEFAULT_KEYS_DIALER); 43. Intent intent = new Intent(this,SecondActivity.class); 44. //PendingIntent延迟意图 45. PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 46. //设置跳转 47. builder.setContentIntent(pendingIntent); 48. //点击后将消息取消 49. builder.setAutoCancel(true); 50. //开机到现在的时间 51. //SystemClock.currentThreadTimeMillis(); 52. //创建notification通知 53. Notification notification = builder.build(); 54. //显示通知,id,通知 55. nm.notify(1, notification); 56. } 57. 58. public void btn1(View view){ 59. //根据id来取消通知 60. nm.cancel(1); 61. //清除所有的通知 62. //nm.cancelAll(); 63. } 64.} activity_main.xml [html] view plain copy 01. 07. 08.