Android适配总结之通知
2019-02-21 本文已影响7人
WangGavin
日常乱拍
本文没有什么技术,仅供记录参考。
1 参考资料
- Android官方文档:Android通知
- 郭霖:Android通知栏微技巧,8.0系统中通知栏的适配
2 主要变更
如果你现在还有Android4.4的旧手机,装了满屏的应用,你会发现,手机的通知栏随时都是一条条的通知,当然会很烦。所以后面,Android 8.0 引入了通知渠道,就是把应用的通知进行分渠道,每个渠道用户可以设置接收或者不接收,这样,重要的通知用户可以正常接收,不感兴趣,不重要的通知用户可以不接收。
例如Twitter应用的通知管理:
所以你的Android目标版本大于或等于8,必须要设置通知渠道,否则通知显示不出来。
3 简单适配方法
3.1 设置通知渠道
当用户手机系统版本大于等于26时,显示通知之前设置通知渠道,一般是在application里加.
这里我直接按照郭哥的方式定义了一个通知工具类:
NotificationUtils.java
/**
* @author newtrekWang
* @fileName NotificationUtils
* @createDate 2019/2/19 11:38
* @desc 通知工具
*/
public final class NotificationUtils {
/**
* 聊天消息渠道
*/
public static final String CHANNEL_ID_CHAT = "chat";
/**
* 咨询消息渠道
*/
public static final String CHANNEL_ID_NEWS = "news";
/**
* 报警消息渠道
*/
public static final String CHANNEL_ID_WARNING = "warning";
/**
* chat通知id
*/
public static final int NOTIFICATION_ID_CHAT = 1;
/**
* 报警通知id
*/
public static final int NOTIFICATION_ID_WARNING = 2;
/**
* 咨询通知id
*/
public static final int NOTIFICATION_ID_NEWS = 3;
/**
* 初始化通知渠道
*/
public static void initNotification(Application application){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
// 聊天消息
createNotificationChannel(application,CHANNEL_ID_CHAT,"聊天消息通知",NotificationManager.IMPORTANCE_HIGH);
createNotificationChannel(application,CHANNEL_ID_NEWS,"系统消息通知",NotificationManager.IMPORTANCE_HIGH);
createNotificationChannel(application,CHANNEL_ID_WARNING,"报警消息通知",NotificationManager.IMPORTANCE_HIGH);
}
}
/**
* 创建通知渠道
* @param application
* @param channelId
* @param channelName
* @param importance
*/
@TargetApi(Build.VERSION_CODES.O)
private static void createNotificationChannel(Application application,String channelId, String channelName, int importance){
NotificationChannel channel = new NotificationChannel(channelId,channelName,importance);
NotificationManager notificationManager = (NotificationManager) application.getSystemService(NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
}
3.2 显示Notification
下面只是显示个系统版本通用的通知。
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this, "chat")
.setContentTitle("收到一条聊天消息")
.setContentText("今天中午吃什么?")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon))
.setAutoCancel(true)
.build();
// 1 是通知id
manager.notify(1, notification);
4 扩展
显示方式:当然通知还有多种展示方式,可以看看Android 8.0中各种通知写法汇总这篇文章。
各系统版本通知适配: 用代理模式定义一个NotificationCompat类代理Notification类