Android 仿QQ桌面icon显示未读信息数量

转载 2016年06月01日 15:25:06
 三星已做测试OK,其他没有手机没做做对应的测试。Android <wbr>仿QQ桌面icon显示未读信息数量


//Currently, it's working from Android 4.0. 
//But some devices, which are released from the manufacturers, are not working.


public class BadgeUtil {
public enum Platform{
samsung,lg,htc,mi,sony
};


    private static final String TAG = "BadgeUtil";


    public static void setBadgeCount(Context context, int count,Platform platform) {
    Intent badgeIntent = null;
    if(platform.equals(Platform.samsung)){
    Log.e(TAG, "samsung....");
    badgeIntent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
       badgeIntent.putExtra("badge_count", count);
       badgeIntent.putExtra("badge_count_package_name", context.getPackageName());
       badgeIntent.putExtra("badge_count_class_name", getLauncherClassName(context));
    }
   
   
    if(platform.equals(Platform.mi)){
    Log.e(TAG, "xiaoMiShortCut....");
    badgeIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE");
badgeIntent.putExtra("android.intent.extra.update_application_component_name",getLauncherClassName(context));
    badgeIntent.putExtra("android.intent.extra.update_application_message_text", count);
    context.sendBroadcast(badgeIntent);
    }
   
    if(platform.equals(Platform.sony)){
    Log.e(TAG, "sony....");
    badgeIntent = new Intent();
    badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true);
    badgeIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
    badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", getLauncherClassName(context));
    badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", count);
    badgeIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());
    }
    if(platform.equals(Platform.htc)){
    Log.e(TAG, "htc....");
    badgeIntent = new Intent("com.htc.launcher.action.UPDATE_SHORTCUT");
    badgeIntent.putExtra("packagename", getLauncherClassName(context));
    badgeIntent.putExtra("count", count);
    }
   
    if(platform.equals(Platform.lg)){
    Log.e(TAG, "lg....");
    badgeIntent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
    badgeIntent.putExtra("badge_count_package_name", context.getPackageName());
    badgeIntent.putExtra("badge_count_class_name", getLauncherClassName(context));
    badgeIntent.putExtra("badge_count", count);
    }
        context.sendBroadcast(badgeIntent);
    }


  
    public static void resetBadgeCount(Context context,Platform platform) {
        setBadgeCount(context, 0,platform);
    }


   
    private static String getLauncherClassName(Context context) {
        PackageManager packageManager = context.getPackageManager();


        Intent intent = new Intent(Intent.ACTION_MAIN);
        // To limit the components this Intent will resolve to, by setting an
        // explicit package name.
        intent.setPackage(context.getPackageName());
        intent.addCategory(Intent.CATEGORY_LAUNCHER);


        // All Application must have 1 Activity at least.
        // Launcher activity must be found!
        ResolveInfo info = packageManager
                .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);


        // get a ResolveInfo containing ACTION_MAIN, CATEGORY_LAUNCHER
        // if there is no Activity which has filtered by CATEGORY_DEFAULT
        if (info == null) {
            info = packageManager.resolveActivity(intent, 0);
        }
        Log.e("getLauncherClassName ", "name = "+ info.activityInfo.name);
        return info.activityInfo.name;
    }
}






在Activity中设置Button的点击事件:




findViewById(R.id.btn_badge).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "厂商:"+Build.MANUFACTURER, 0).show();
int count;
try {
count = Integer.valueOf(etNum.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "请输入整数", 0).show();
return;
}
if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){
     BadgeUtil.setBadgeCount(MainActivity.this, count, BadgeUtil.Platform.mi);
   }else if(Build.MANUFACTURER.equalsIgnoreCase("samsung")){
    BadgeUtil.setBadgeCount(MainActivity.this, count, BadgeUtil.Platform.samsung);
   }else if(Build.MANUFACTURER.equalsIgnoreCase("htc")){
    BadgeUtil.setBadgeCount(MainActivity.this, count, BadgeUtil.Platform.htc);
   }else if(Build.MANUFACTURER.equalsIgnoreCase("lg")){
    BadgeUtil.setBadgeCount(MainActivity.this, count, BadgeUtil.Platform.lg);
   }else if(Build.MANUFACTURER.equalsIgnoreCase("sony")){
    BadgeUtil.setBadgeCount(MainActivity.this, count, BadgeUtil.Platform.sony);
   }
}

});



转自:http://blog.sina.com.cn/s/blog_96a146890102v9mv.html


android实现桌面icon未读信息图标(类似与iPhone的badge)

给大家分享一个实现android系统上实现桌面icon未读信息气泡效果。类似于iPhone的badge。是从github上找到的源代码。从原文上来看目前只支持samsung和LG,三星亲测有效。 ...
  • fuqinyijiu
  • fuqinyijiu
  • 2015年01月15日 11:34
  • 16629

Android中桌面图标显示通知消息的数量

在Android手机上,可以看到qq、微信、微博、陌陌等都可以在桌面图标上显示未读消息数量提醒,一直很奇怪是如何实现的。        看了一些博客,Android原生并不支持,网上提供了有很多种实...
  • wxz1179503422
  • wxz1179503422
  • 2017年02月16日 11:56
  • 3821

桌面Icon显示消息未读数目

桌面Icon显示消息未读数目 原理:原生android 不支持。但是对于改过源代码的android系统,假如提供了广播去修改Icon,那么我们就可以通过这个广播来修改Icon达到显示消息数的效果。 ...
  • melody534056585
  • melody534056585
  • 2016年07月20日 09:38
  • 1605

Android Launcher界面未接来电和未读短信条数的显示

一 分析研究需要     我们需要实现的是当有一个未接来电和
  • keranCSDN
  • keranCSDN
  • 2014年05月23日 15:49
  • 3193

仿QQ微信底部的带消息数量

原创~~~仿QQ微信底部的带消息数量 菜鸟的起飞之路    问题思路: 1.利用FragmentTabhost  作为主页面, 下方三个切换按钮 2.用每个按钮为一个view ,view 的布局...
  • ccj659
  • ccj659
  • 2016年03月25日 15:39
  • 1096

android仿qq微信的消息数量显示功能

下面是显示数量布局的代码。其实很简单,就是帧布局嵌套帧布局就好了。
  • y841349476
  • y841349476
  • 2016年06月17日 10:24
  • 345

仿QQ拖动删除未读消息个数气泡之二

在仿QQ拖动删除未读消息个数气泡这篇文章中,模仿了QQ的删除未读消息气泡,不过也遗留了一个问题,当时为了让气泡能够在全屏范围内拖动,不能将其放在布局文件xml中,而是采用了在主布局加载完成后用addV...
  • gesanri
  • gesanri
  • 2015年09月16日 10:52
  • 2528

Android仿QQ未读消息拖拽删除粘性效果

这种效果已经有很多人实现了,网上相关的博文也不少。今天,我就站在巨人的肩膀上再稍微做一些优化和扩展。有写的不对的地方还望大家指正。 先来看一下效果图:                       ...
  • xiaowantong1991
  • xiaowantong1991
  • 2016年02月01日 14:53
  • 2392

安卓开发:角标显示未读消息数

项目中有个聊天页面,在Tab栏需要显示未读消息,好像哪个项目都有这样的需求,,, 在网上找了有好多BadgeView这样的控件,可以实现各式各样效果,但是我又不想要那么多主题,就自己写了一个,很简单...
  • ximen_qing
  • ximen_qing
  • 2017年03月22日 11:25
  • 1065

《仿QQ未读消息粘性按钮》

思路 控件结构 封装思路 细节注意 使用方法 1.控件结构 继承自UIButton, 对系统的按钮进行进一步的分装,主要是由一个圆形的UIView - smallCircle、按钮本身和一个CASha...
  • u014455765
  • u014455765
  • 2016年06月10日 16:36
  • 754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 仿QQ桌面icon显示未读信息数量
举报原因:
原因补充:

(最多只允许输入30个字)