8.1 使用通知(Notification)
来源:互联网 发布:benaughty 知乎 编辑:程序博客网 时间:2024/05/07 05:53
8.1.1 通知的基本用法
通知既可以在活动里创建,也可以在广播接收器里创建,也可以服务里创建。相比广播接收器和服务,在活动里创建通知的场景还是比较少的,因为一般只有当程序进入后台的时候才需要使用通知。但创建通知的整体步骤基本相同。
1. NotificationManager
首先需要一个NotificationManager
来对通知进行管理,可以使用Context
的getSystemService()
方法获取到。
getSystemService()
方法接收一个字符串参数用于确定获取系统的那个服务,这里传入Context.NOTIFICATION_SERVICE
,即可。
NotificationManager
的实例就可以写成:
NotificationManager manager = (NotificatonManager) getSystemService(Context.NOTIFICATION_SERVICE);
2. 创建一个Notification
对象
Notification.Builder builder = new Notification.Builder(MainActivity.this);builder.setSmallIcon(R.drawable.ic_launcher); //设置图标 builder.setContentTitle("通知"); //设置标题 builder.setContentText("点击查看详细内容"); //消息内容 builder.setWhen(System.currentTimeMillis()); //发送时间
3. 让通知显示→notify()
方法
调用NotificationManager
的notify()
方法可以让通知显示出来
manager.notify(1, builder.build());
notify()
方法接收两个参数,第一个参数是id,要保证为每个通知所指定的id都是不同的。第二个参数则是Notification
对象。
4. 实现通知可点击(PendingIntent
)
PendingIntent
和Intent
都可以用于启动活动、启动服务以及发送广播等,但Intent
更倾向于立即去执行某个动作,而PendingIntent
则倾向于在某个合适的时机去执行某个动作。
PendingIntent
主要提供了几个静态方法用于获取PendingIntent
的实例,可以根据需求选择使用getActivity()
方法、getBroadcast()
方法、还是getService()
方法。这几个方法所接收的参数都是相同的:
第一个是Context
第二个参数一般用不到,通常都是传入0
即可。
第三个参数是一个Intent
对象,我们可以通过这个对象构建出PendingIntent
的行为,有FLAG_ONE_SHOT
、FLAG_NO_CREATE
、FLAG_CANCEL_CURRENT
和FLAG_UPDATE_CURRENT
四种值可选。
给通知加入点击功能:
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FlAG_CANCEL_CURRENT);builder.SetContentIntent(pi);
让通知栏的图标消失:
调用NotificationManager
的cancel()
方法就可以取消通知了。
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.cancel(1);
想要取消那一条通知,就在cancel()
中传入相应的id即可。
8.1.2 通知的高级技巧
1. 收到通知时响铃
Uri soundUri = Uri.fromFile(new File("/system/media/audio/alarms/Beep.ogg")); //builder.setSound(soundUri); //在通知发出时播放音频
2. 收到通知时震动
这里使用的是vibrate
这个属性。它是一个长整型数组,用于设置手机静止和振动的时长,以毫秒为单位(1s = 1000ms )。下标为0的值表示手机静止的时长,下标为1表示振动的时长,下表为2又表示静止的时长,以此类推。
long[] vibrates = {0, 1000, 1000, 1000}; //立刻振动1s,再静止1s,再振动1sbuilder.setVibrate(vibrates); //让手机振动
3. 控制LED灯
通过Notification.Builder
的setLights(int argb, int onMs, int offMs)
方法实现,三个参数分别代表呼吸灯的颜色、呼吸灯亮起的时长、呼吸灯熄灭的时长。
builder.setLights(color.RED, 1000, 1000);
如果不需要进行那么多复杂的设置,可以直接使用通知的默认效果,他会根据当前手机的环境来决定播放什么铃声以及如何振动:
builder.setDefaults(Notification.DEFAULT_ALL);
- 8.1 使用通知(Notification)
- 使用通知(Notification)
- NOtification(通知)的使用
- android 使用通知(Notification)
- Android 使用通知(Notification)
- notification(通知)的使用
- notification(通知)的使用
- Android的通知(Notification)使用详解
- android 通知的使用(Notification)
- iOS 学会使用通知(notification)
- Android的通知(Notification)使用详解
- Android通知Notification的使用(一)
- Android 通知(Notification)的使用
- Android的通知(Notification)使用详解
- 通知栏(Notification)的基本使用
- Notification使用 大通知
- Android 使用Notification(通知)
- 通知栏Notification使用
- 字符流和字节流常用类,及其之间的数据交换实现
- PHP中散列密码的安全
- gcc三级优化
- effective C++值模板基类的名字查找
- 新入坑python 写点东西记录一下
- 8.1 使用通知(Notification)
- 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs
- [COGS2524][数论]完全平方数
- Java爬虫,信息抓取的实现
- 1115C语言实验——交换两个整数的值(顺序结构)
- Oracle-分析函数之排序后顺序号row_number()
- 数据结构 图的邻接表表示转换成邻接矩阵表示的算法
- POJ 3122 Pie(二分逼近)
- Xcode 8 和iOS 10 新特性