写这篇文章可能对于应用层的开发者帮助不大,我也只是记录一下。
桌面为未读数角标对于不同的Rom实现都是不同的,android原生系统没有该功能,各厂商手机的实现调用方式也不一样。至于怎么添加可以去看这篇文章http://blog.csdn.net/eclipsexys/article/details/50206055。
前两天系统要做一个ota升级的功能,升级后要在Settings上显示角标,然后老大找到我,说要做这个功能。当然我是据理力争,说实现不了,后来发现还是too yang。我们代码是基于MTK的,launcher也不例外,而MTK自己做了这个功能,但只是零星的几个系统应用,并没有包含其他安装的应用。这里放出点代码
<?xml version="1.0" encoding="UTF-8"?>
<unreadshortcuts xmlns:launcher="http://schemas.android.com/apk/res/com.android.pplauncher3">
<shortcut
launcher:unreadPackageName="com.android.dialer"
launcher:unreadClassName="com.android.dialer.DialtactsActivity"
launcher:unreadType="0"
launcher:unreadKey="com_android_contacts_mtk_unread"
/>
<shortcut
launcher:unreadPackageName="com.android.mms"
launcher:unreadClassName="com.android.mms.ui.BootActivity"
launcher:unreadType="0"
launcher:unreadKey="com_android_mms_mtk_unread"
/>
<shortcut
launcher:unreadPackageName="com.android.email"
launcher:unreadClassName="com.android.email.activity.Welcome"
launcher:unreadType="0"
launcher:unreadKey="com_android_email_mtk_unread"
/>
<shortcut
launcher:unreadPackageName="com.android.calendar"
launcher:unreadClassName="com.android.calendar.AllInOneActivity"
launcher:unreadType="0"
launcher:unreadKey="com_android_calendar_mtk_unread"
/>
<shortcut
launcher:unreadPackageName="com.orangelabs.rcs"
launcher:unreadClassName="com.mediatek.rcse.activities.ChatMainActivity"
launcher:unreadType="0"
launcher:unreadKey="com_android_rcse_mtk_unread"
/>
<shortcut
launcher:unreadPackageName="com.android.cellbroadcastreceiver"
launcher:unreadClassName="com.android.cellbroadcastreceiver.CellBroadcastListActivity"
launcher:unreadType="0"
launcher:unreadKey="com_android_calendar_mtk_unread"
/>
<shortcut
launcher:unreadPackageName="com.mediatek.cellbroadcastreceiver"
launcher:unreadClassName="com.mediatek.cellbroadcastreceiver.CellBroadcastListActivity"
launcher:unreadType="0"
launcher:unreadKey="com_mediatek_cellbroadcastreceiver_mtk_unread"
/>
</unreadshortcuts>
这几个是原生就支持的几个,原理也很简单,就是broadcast 传过去数量,然后launcher去显示。要实现我Settings的功能也是足够的简单,在上面的基础上加上
<shortcut
launcher:unreadPackageName="com.android.settings"
launcher:unreadClassName="com.android.settings.Settings"
launcher:unreadType="0"
launcher:unreadKey="com_android_settings_ota_mtk_unread"
/>
调用
private static final String MTK_ACTION_UNREAD_CHANGED = Intent.ACTION_UNREAD_CHANGED;
private static final String MTK_EXTRA_UNREAD_NUMBER = Intent.EXTRA_UNREAD_NUMBER;
private static final String MTK_EXTRA_UNREAD_COMPONENT = Intent.EXTRA_UNREAD_COMPONENT;
private static void sendUnreadBroadcast(Context context, int numReminders) {
Intent intent = new Intent();
intent.setAction(MTK_ACTION_UNREAD_CHANGED);
intent.putExtra(MTK_EXTRA_UNREAD_NUMBER, numReminders);
intent.putExtra(MTK_EXTRA_UNREAD_COMPONENT, new ComponentName("com.android.settings",
"com.android.settings.Settings"));
context.sendBroadcast(intent);
}
要消失就是直接把传过去的numReminders改为0就ok