100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android icon红点 android 桌面图标消息红点

android icon红点 android 桌面图标消息红点

时间:2024-01-10 23:58:05

相关推荐

android icon红点 android 桌面图标消息红点

前言

消息通知是大多数用户类app都会用到的功能,这里介绍的是当有新消息的时候,app的桌面图标像微信和qq那样右上角出现红色的消息数量红点。实现代码分为8.0-版本和8.0+版本。

aaa.png

android 8.0+ (版本号 26 名称 O)

8.0+的系统直接使用新版本的消息通知渠道NotificationChannel即可设置桌面红点

//测试通知

public void testNotify(View v) {

NotificationCompat.Builder builder;

//8.0

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

builder = new NotificationCompat.Builder(this, getChannelId());

} else {

builder = new NotificationCompat.Builder(this, null);

//8.0以下版本桌面红点显示

// TODO: /8/2

}

builder.setSmallIcon(R.mipmap.ic_launcher)

.setDefaults(Notification.DEFAULT_ALL)

.setTicker("title")

.setAutoCancel(true)

.setContentTitle("contentTitle")

.setContentText("contentText");

mNotificationManager.notify(123, builder.build());

}

@RequiresApi(api = Build.VERSION_CODES.O)

public String getChannelId() {

final String channelId = "1";

final String channelName = "com.mmc.tj";

NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);

channel.enableLights(true);//显示桌面红点

channel.setLightColor(Color.RED);

channel.setShowBadge(true);

mNotificationManager.createNotificationChannel(channel);

return channel.getId();

}

android 8.0以下版本

8.0以下版本的桌面红点需要借助开源库ShortcutBadger,这个库是专门用来帮助Android开发者快速生成桌面角标的。这个库并不是所有的机型都适配,对于主流的华为,xiaomi,三星,oppo支持,魅族和酷派等就不行,使用方法其实很简单,在github主页都有介绍:

//测试通知

public void testNotify(View v) {

NotificationCompat.Builder builder;

//8.0

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

builder = new NotificationCompat.Builder(this, getChannelId());

} else {

builder = new NotificationCompat.Builder(this, null);

//8.0以下版本桌面红点显示

ShortcutBadger.applyCount(context, ++sMessageCount);

}

builder.setSmallIcon(R.mipmap.ic_launcher)

.setDefaults(Notification.DEFAULT_ALL)

.setTicker("title")

.setAutoCancel(true)

.setContentTitle("contentTitle")

.setContentText("contentText");

mNotificationManager.notify(123, builder.build());

}

红点的取消

8.0+的系统不用我们去实现,app运行为前台进程时就自动取消了。对于8.0-版本通过ShortcutBadger库实现的,我们依然希望只要app任何一个界面一打开,就能取消红点,实现的思路如下

//创建一个Application.ActivityLifecycleCallbacks,该类可以监听每一个activity的生命周期

public class BaseAppLifeCycle implements Application.ActivityLifecycleCallbacks {

public void init(Application application) {

application.registerActivityLifecycleCallbacks(this);

}

@Override

public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

}

@Override

public void onActivityStarted(Activity activity) {

}

//注册该监听以后,app的每一个activity的生命周期都会调用该callback的对应方法

@Override

public void onActivityResumed(Activity activity) {

//app不管哪个界面可见,桌面红点即消失

ShortcutBadger.applyCount(context,0);

}

@Override

public void onActivityPaused(Activity activity) {

}

@Override

public void onActivityStopped(Activity activity) {

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override

public void onActivityDestroyed(Activity activity) {

}

}

//在Application中注册该监听

public class BaseApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

new BaseAppLifeCycle().init(this);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。