Android之在app圖示新增角標

weixin_34007291發表於2016-09-18

在做一些推送服務的時候,想在應用圖示上新增未讀訊息,Android桌面角標的適配確實是非常坑爹的需求。原生系統根本就沒有這個功能,國內很多廠家效仿ios都自己定義了該功能。

現在就為大家介紹部分機型新增角標的程式碼。

1、華為手機上顯示角標:(已通過)

//新增許可權
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>

新增如下程式碼:

String launcherClassName = "com.redfinger.huaweichangebadge.MainActivity";//啟動的Activity完整名稱
Bundle localBundle = new Bundle();//需要儲存的資料
localBundle.putString("package",context.getPackageName());//包名
localBundle.putString("class",launcherClassName);
localBundle.putInt("badgenumber",99);//未讀資訊條數
getContentResolver().call(
    Uri.parse("content://com.huawei.android.launcher.settings/badge/"),
    "change badge",null,localBundle);

2、小米手機上顯示角標:(已通過)

private void setXiaoMiBadge(Context context,int number){
        try{
            Class miuiNotificationClass = Class.forName("android.app.MiuiNotification");
            Object miuiNotification = miuiNotificationClass.newInstance();
            Field field = miuiNotification.getClass().getDeclaredField("messageCount");
            field.setAccessible(true);
            field.set(miuiNotification,String.valueOf(number==0?"":number));
        }catch (Exception e){
            e.printStackTrace();
            // miui6之前
            Intent localIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE");
            localIntent.putExtra("android.intent.extra.update_application_component_name",context.getPackageName()+"/."+"MainActivity");
            localIntent.putExtra("android.intent.extra.update_application_message_text",String.valueOf(number==0?"":number));
            context.sendBroadcast(localIntent);
        }
    }

3、三星手機新增角標:(已通過)

String launcherClassName = "com.redfinger.huaweichangebadge.MainActivity";
Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
intent.putExtra("badge_count",99);
intent.putExtra("badge_count_package_name",getPackageName());
intent.putExtra("badge_count_class_name",launcherClassName);
sendBroadcast(intent);

4、索尼手機新增角標,找不到相關機型:(未測試)

private final String lancherActivityClassName =MainActivity.class.getName();
    
    private void sendToSony(Context context,String number) {
        boolean isShow = true;
        if ("0".equals(number)) {
            isShow = false;
        }
        Intent localIntent = new Intent();
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", isShow);//是否顯示
        localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME",lancherActivityClassName );//啟動頁
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", number);//數字
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());//包名
        context.sendBroadcast(localIntent);
    }

相關文章