在图标启动器android中显示计数器通知

时间:2015-05-22 12:32:56

标签: android

在我的Android应用程序中,我想显示计数图标徽章。我正在使用enter link description here中的代码。当我测试它时,我总是得到这个错误。 unable the execute badge.shortcutbadger is currently not support the home launcher package"com.android.launcher"。当我调试它时,我发现应用程序无法正确获取包名称。

 Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    String currentHomePackage = resolveInfo.activityInfo.packageName;
   //String currentHomePackage = "me.leolin.shortcutbadger.example.MainActivity";
    TextView textViewHomePackage = (TextView) findViewById(R.id.textViewHomePackage);
    textViewHomePackage.setText("launcher:" + currentHomePackage);

所以我把它手动,但我总是得到与正确的包名称相同的消息错误。

2 个答案:

答案 0 :(得分:0)

您使用的库仅适用于默认的三星,HTC,LG,索尼和其他发射器,但不适用于官方Android启动器(com.android.launcher)。

这可能是您在测试应用时遇到问题的原因。

答案 1 :(得分:0)

您可以使用以下代码设置启动器图标的徽章计数,但三星,HTC等设备支持的所有设备均不支持此功能...

 public static void setBadge(Context context, int count) {
        String launcherClassName = getLauncherClassName(context);
        if (launcherClassName == null) {
            return;
        }
        Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
        intent.putExtra("badge_count", count);
        intent.putExtra("badge_count_package_name", context.getPackageName());
        intent.putExtra("badge_count_class_name", launcherClassName);
        context.sendBroadcast(intent);
    }

public static String getLauncherClassName(Context context) {

    PackageManager pm = context.getPackageManager();

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
    for (ResolveInfo resolveInfo : resolveInfos) {
        String pkgName = resolveInfo.activityInfo.applicationInfo.packageName;
        if (pkgName.equalsIgnoreCase(context.getPackageName())) {
            String className = resolveInfo.activityInfo.name;
            return className;
        }
    }
    return null;
}