Je souhaite mettre un badge sur l'icône affichée dans HOME comme iPhone.
Je l'ai traité au travail, je vais donc l'écrire sous forme de mémo.
Il existe une méthode, mais veuillez noter qu'elle n'est pas applicable à toutes les applications HOME et ne peut être affichée que dans certaines applications HOME.
Après vérification, cela a fonctionné avec l'application HOME suivante.
Les autres applications HOME n'ont pas encore été vérifiées, je les vérifierai donc plus tard. Au travail, je l'ai également affiché sur Xperia Home, mais dans ce cas, la mise en œuvre est un peu différente, donc Je l'ajouterai plus tard. ..
Maintenant pour la mise en œuvre. C'est un problème, donc je vais simplement coller les méthodes grossièrement créées.
Veuillez vous reporter à ici. (Au contraire, c'est presque la même chose.)
/**
*Effacez le badge sur l'icône.<br>
** Définir 0
*
* @contexte de contexte param
*/
public static void clearIconBadge(final Context context) {
setIconBadge(context, 0);
}
/**
*Mettez un badge sur l'icône.
*
* @contexte de contexte param
* @numéro de badge de comptage de paramètres à afficher
*/
public static void setIconBadge(final Context context, final int count) {
if (context == null) {
return;
}
final String launcherClassName = getLauncherClassName(context);
if (TextUtils.isEmpty(launcherClassName)) {
return;
}
final 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);
}
/**
*Obtenez le nom de classe de l'application en cours d'exécution.
*
* @param context Contexte.
* @return Nom de classe de l'application en cours d'exécution<br>
*Nul s'il ne peut pas être obtenu normalement.
*/
@Nullable
private static String getLauncherClassName(@NonNull final Context context) {
final PackageManager pm = context.getPackageManager();
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);
for (final ResolveInfo resolveInfo : resolveInfoList) {
if (resolveInfo == null) {
continue;
}
final String pkgName = resolveInfo.activityInfo.applicationInfo.packageName;
if (pkgName.equalsIgnoreCase(context.getPackageName())) {
return resolveInfo.activityInfo.name;
}
}
return null;
}
Appelez setIconBadge () lorsque vous souhaitez que le badge apparaisse. Aussi, si vous souhaitez effacer le badge, vous pouvez mettre 0, donc s'il s'agit du code écrit en ↑ Ce n'est pas grave si vous appelez clearIconBadge ().
Je le posterai également pour la langue Kotlin. Collez l'utilitaire créé tel quel.
class Utility {
companion object {
/**
*Effacez le badge d'icône.<br>
** Définir 0
*
* @contexte de contexte param
*/
fun clearIconBadge(context: Context) {
setIconBadge(context, 0)
}
/**
*Mettez un badge sur l'icône.
* @contexte de contexte param
*
* @numéro de badge de comptage de paramètres à afficher
*/
fun setIconBadge(context: Context?, count: Int) {
if (context == null) {
return
}
val launcherClassName = getLauncherClassName(context)
if (TextUtils.isEmpty(launcherClassName)) {
return
}
val intent = Intent("android.intent.action.BADGE_COUNT_UPDATE")
intent.putExtra("badge_count", count)
intent.putExtra("badge_count_package_name", context.packageName)
intent.putExtra("badge_count_class_name", launcherClassName)
context.sendBroadcast(intent)
}
/**
*Obtenez le nom de classe de l'application en cours d'exécution.
*
* @param context Contexte.
* @return Nom de classe de l'application en cours d'exécution<br></br>
* *Nul s'il ne peut pas être obtenu normalement.
*/
private fun getLauncherClassName(context: Context): String? {
val pm = context.packageManager
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
val resolveInfoList = pm.queryIntentActivities(intent, 0)
for (resolveInfo in resolveInfoList) {
if (resolveInfo == null) {
continue
}
val pkgName = resolveInfo.activityInfo.applicationInfo.packageName
if (pkgName.equals(context.packageName, ignoreCase = true)) {
return resolveInfo.activityInfo.name
}
}
return null
}
}
}
Recommended Posts