Notification
2016-04-27 本文已影响72人
TTTqiu
一、通知的创建方法
1. 获得 NotificationManager 实例 manager。
2. 获得 Notification.Builder 实例 builder。
3. 利用 builder 设置通知属性。
4. 使用 builder 的 build() 方法创建 Notification 实例。
5. 使用 manager 的 notify( 通知 id, Notification 实例 ) 方法显示通知。
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentTitle("title");
builder.setContentText("text");
builder.setWhen(System.currentTimeMillis()); // 显示时间
Notification notification = builder.build();
manager.notify(1, notification);
二、通知的点击事件
1. 创建 Intent。
2. 通过 PendingIntent 的静态方法 getActivity()、getBroadcast()、getService(),获得 PendingIntent 实例。
3. 传入 builder 的 setContentIntent( PendingIntent 实例 ) 方法。
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
PendingIntent pi=PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
builder.setContentIntent(pi);
-
PendingIntent 的静态方法:
- 第一个参数:Context。
- 第二个参数:一般不用,传 0 即可。
- 第三个参数:Intent 对象。
- 第四个参数:设置 PendingIntent 的行为:
1.FLAG_ONE_SHOT
2.FLAG_NO_CREATE
3.FLAG_CANCEL_CURRENT
4.FLAG_UPDATE_CURRENT
三、取消通知
- 如果没有在代码中对通知进行取消,系统状态上的通知图标就会一直显示。
调用 NotificationManager 的 cancel( 通知 id )。
manager.cancel(1);
比如进入 Main2Activity 后取消通知:
public class NotificationActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notification_layout);
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);
}
}
四、通知的高级技巧
1. 声音
- 使用** sound **属性。
- 需要音频文件的 URI 获得 Uri 对象。
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/Basic_tone.ogg"));
notification.sound = soundUri;
2. 震动
- 使用 **vibrate **属性。
- 需要一个长整型的数组,用于设置手机静止和振动的时长,以毫秒为单位。
- 下标为 0 的值表示手机静止的时长,下标为 1 的值表示手机振动的时长,下标为 2 的值又表示手机静止的时长,以此类推。
- 震动还需要声明权限:
<uses-permission android:name="android.permission.VIBRATE" />
long[] vibrates = {0, 1000, 1000, 1000};
notification.vibrate = vibrates;
3. LED 灯
- ledARGB 用于控制LED 灯的颜色,一般有红绿蓝三种颜色可选。
- ledOnMS 用于指定LED 灯亮起的时长,以毫秒为单位。
- ledOffMS 用于指定LED 灯暗去的时长,以毫秒为单位。
- flags 可用于指定通知的一些行为,其中就包括显示LED 灯这一选项。
如果想要实现LED 灯以绿色的灯光一闪一闪的效果,就可以写成:
notification.ledARGB = Color.GREEN;
notification.ledOnMS = 1000;
notification.ledOffMS = 1000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
4. 通知的默认效果
- 如果不想进行那么多繁杂的设置,也可以直接使用通知的默认效果,它会根据当前手机的环境来决定播放什么铃声,以及如何振动:
notification.defaults = Notification.DEFAULT_ALL;