android 未读短信app,Android APP桌面启动图标未读信息小红点实现——在巨人的肩膀上淌坑...

让一个码农辛勤耕作的最大动力,是需求。 ——by Mr Lu

没错,需求就这样来了。

小红点,正式一点的叫法【图标角标】

目前,Android官方生态里没有完善的小红点实现方案,各厂商的情况大家都懂的,所以适配是很恶心而且绕不过的坎

ShortcutBadger项目最新版本身已经相对很完善了,但因为Android生态的混乱,可能现在这是一个完善的方案,过段时间就不一定了。所以在使用的过程中发现了一些问题,主要有一下两个:

就好了,很明显,这是华为自定义的权限。

是时候引用一句名言了

官方文档是个好东西,如果有的话。 ——by Mr Lu

2.三星手机(Android8.0+)不显示

关于三星手机适配,ShortcutBadger已经做了很多工作,debug代码跟到底,一切ok,就是不显示。官方文档没找到,然后找项目issues,果然有人提到类似的问题,顺着看到了思路

https://developer.android.com/training/notify-user/badges#set_custom_notification_count

没错,google官方文档,核心思路,通过Notification实现,设置的消息个数可用在Badger角标

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)

.setContentTitle("New Messages")

.setContentText("You've received 3 new messages.")

.setSmallIcon(R.drawable.ic_notify_status)

.setNumber(messageCount)

.build();

实践证明,发通知后角标就显示了;进一步发现,只有通知栏有通知,ShortcutBadger统一设置角标的方法就生效了,说明三星8.0+显示角标必须有Notification

ShortcutBadger.applyCount(Context context, int badgeCount);

最终的处理

if (Build.MANUFACTURER.equalsIgnoreCase("samsung") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

startService(new Intent(MainActivity.this, BadgeIntentService.class).putExtra("badgeCount", badgeCount));

}

ShortcutBadger.applyCount(context, badgeCount);

BadgeIntentService服务的作用是开启Notification,相关代码ShortcutBadger项目的demo中有

public class BadgeIntentService extends IntentService {

private static final String NOTIFICATION_CHANNEL = "me.leolin.shortcutbadger.example";

private int notificationId = 0;

public BadgeIntentService() {

super("BadgeIntentService");

}

private NotificationManager mNotificationManager;

@Override

public void onCreate() {

super.onCreate();

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

}

@Override

public void onStart(Intent intent, int startId) {

super.onStart(intent, startId);

}

@Override

protected void onHandleIntent(Intent intent) {

if (intent != null) {

int badgeCount = intent.getIntExtra("badgeCount", 0);

// mNotificationManager.cancel(notificationId);

mNotificationManager.cancelAll();

if (badgeCount==0) {

return;

}

notificationId++;

Notification.Builder builder = new Notification.Builder(getApplicationContext())

.setContentTitle("NewMessages")

.setContentText("You've received "+badgeCount+" messages.")

.setSmallIcon(R.drawable.ic_launcher);

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

setupNotificationChannel();

builder.setChannelId(NOTIFICATION_CHANNEL);

}

Notification notification = builder.build();

ShortcutBadger.applyNotification(getApplicationContext(), notification, badgeCount);

mNotificationManager.notify(notificationId, notification);

}

}

@TargetApi(Build.VERSION_CODES.O)

private void setupNotificationChannel() {

NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL, "ShortcutBadger Sample",

NotificationManager.IMPORTANCE_DEFAULT);

mNotificationManager.createNotificationChannel(channel);

}

}

总结

以上只是我实际开发遇到的一些坑,此外肯定还有其他各种各样的坑,其实issue本身并不可怕,关键是分析问题的思路,学会借助各种资源,官方文档、社区大佬等等。最后,感谢ShortcutBadger项目的作者# leolin310148

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值