2019独角兽企业重金招聘Python工程师标准>>>
当程序并不是出在运行状态的时候,可以调用Notification来显示通知。
1、创建
Notification的创建主要涉及到三个类:NotificationManager,Notification和PendingIntent
NotificationManager主要是对通知进行管理。
Notification类主要用于对Notification的一些属性进行定义。获得的方式主要是通过兼容各个版本的support-v4中的NotificationCompat类来获得。
PendingIntent类可以理解成一个延迟执行的intent。
下面是一个实例代码:
public static final int NOTIFICATIONID = 0x101;
private NotificationManager notificationManager;
private NotificationCompat.Builder builder;
private Notification notification;
private PendingIntent pendingIntent;
notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(NotificationManiActivity.this,null);
Intent intent = new Intent(NotificationManiActivity.this,NotificationTestActivity.class);
pendingIntent = PendingIntent.getActivity(NotificationManiActivity.this,0,intent,0);
notification =builder
.setContentTitle("通知标题")
.setContentText("通知内容")
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)//Notification什么时候显示
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(NOTIFICATIONID,notification);
2、取消
取消的方式有两种,分别为:
a、调用setAutoCancel方法,点击以后,Notification会自动消失
b、调用notificationManager.cancel方法,根据notificationId来取消Notification
实例代码如下:
/**
* 取消方式一
* 调用setAutoCancel方法,点击以后,Notification会自动消失
* @param view
*/
public void oneCancel(){
notification =builder
.setContentTitle("通知标题")
.setContentText("通知内容")
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
.setAutoCancel(true)//点击以后,Notification会自动消失
.build();
notificationManager.notify(NOTIFICATIONID,notification);
}
/**
* 取消方式二
* 调用notificationManager.cancel方法,根据notificationId来取消Notification
* @param view
*/
public void twoCancel(){
notificationManager.cancel(NOTIFICATIONID);//根据notificationId来取消Notification
}
3、技巧
3.1 Notificationt带声音
/**
* notificationt带声音
* @param view
*/
public void sound(){
notification =builder
.setContentTitle("notificationt带声音")
.setContentText("notificationt带声音")
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luma.ogg")))//设置Notification创建的时候的提示音
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(NOTIFICATIONID,notification);
}
3.2 Notificationt带震动
/**
* notificationt带震动
* @param view
*/
public void vibrate(View view){
notification =builder
.setContentTitle("notificationt带震动")
.setContentText("notificationt带震动")
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
//设置震动的频率,小标为0的静止的时长,下标为1的表示振动的时长,小标为2的静止的时长,以此类推
.setVibrate(new long[]{0,1000,1000,1000})
.build();
notificationManager.notify(NOTIFICATIONID,notification);
}
3.3 Notificationt带LED灯光
/**
* Notificationt带LED灯光
* @param view
*/
public void led(View view){
notification =builder
.setContentTitle("Notificationt带LED灯光")
.setContentText("Notificationt带LED灯光")
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
//LED灯光颜色,LED灯光亮起时长,LED灯光暗去时长
.setLights(Color.GREEN,1000,1000)
.build();
notificationManager.notify(NOTIFICATIONID,notification);
}
3.4 Notificationt带bigText
/**
* Notificationt带bigText
* @param view
*/
public void bigText(View view){
notification =builder
.setContentTitle("Notificationt带bigText")
.setStyle(new NotificationCompat.BigTextStyle().bigText("Notificationt带bigTextNotificationt带bigTextNotificationt带" +
"bigTextNotificationt带bigTextNotificationt带bigTextNotificationt带"+
"bigTextNotificationt带bigTextNotificationt带bigTextNotificationt带bigT" +
"extNotificationt带bigTextNotificationt带bigTextNotificationt带bigText" +
"Notificationt带bigTextNotificationt带bigText"))
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(NOTIFICATIONID,notification);
}
效果图为:
注意:这个是模拟器的效果,对于部分真机,则直接不显示文字内容
3.5 Notificationt带bigPicture
notification =builder
.setContentTitle("Notificationt带bigPicture")
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher_round)))
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(NOTIFICATIONID,notification);
注意:这个对模拟器有效果,对于部分真机,则直接不显示文字内容
3.6 Notificationt带priority
/**
* Notificationt带priority
* @param view
*/
public void priority(View view){
notification =builder
.setContentTitle("Notificationt带priority")
.setContentText("Notificationt带priority")
.setPriority(NotificationCompat.PRIORITY_MAX)
.setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
.build();
notificationManager.notify(NOTIFICATIONID,notification);
}
优先级的参数从低到高分别为:PRIORITY_DEFAULT表示默认的重要程度,和不设置效果是一样的。PRIORITY_MIN表示最低的重要程度,系统只会在特定的场景中才会显示这条通知,比如用户下拉状态栏的时候;PRIORITY_LOW表示较低的重要程度,系统可能会将这类通知缩小,或者是改变其显示的顺序(有一部分手机会修改显示顺序),并将其排在更重要的通知之后;PRIORITY_HIGH表示较重的重要程度,系统可能会将这类通知放大,或者是改变其显示顺序,排在比较靠前的位置;PRIORITY_MAX表示最重要的通知,有一些手机上面会直接显示成一个弹窗的形式,有一些还是改变显示顺序。
4、自定义部分
参考地址:https://developer.android.com/training/notify-user/custom-notification#java