Ich möchte ein Abzeichen auf das in HOME angezeigte Symbol wie das iPhone setzen.
Ich habe mich bei der Arbeit damit beschäftigt, also werde ich es als Memo schreiben.
Es gibt eine Methode, aber bitte beachten Sie, dass sie nicht für alle HOME-Apps gilt und nur in einigen HOME-Apps angezeigt werden kann.
Nach der Überprüfung funktionierte es mit der folgenden HOME-App.
--Galaxy TouchWiz
Andere HOME-Apps wurden noch nicht überprüft, daher werde ich sie später überprüfen. Bei der Arbeit habe ich es auch auf Xperia Home angezeigt, aber in diesem Fall ist die Implementierung etwas anders Ich werde es später hinzufügen. ..
Nun zur Implementierung. Es ist ein Ärger, also füge ich einfach die grob erstellten Methoden ein.
Weitere Informationen finden Sie unter hier. (Eher ist es fast das gleiche.)
/**
*Löschen Sie das Abzeichen auf dem Symbol.<br>
** Setze 0
*
* @param Kontext Kontext
*/
public static void clearIconBadge(final Context context) {
setIconBadge(context, 0);
}
/**
*Setzen Sie ein Abzeichen auf das Symbol.
*
* @param Kontext Kontext
* @param count badge Nummer, die angezeigt werden soll
*/
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);
}
/**
*Ruft den Klassennamen der laufenden App ab.
*
* @param context Kontext.
* @Rückgabe Klassenname der laufenden App<br>
*Null, wenn es nicht normal erhalten werden kann.
*/
@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;
}
Rufen Sie setIconBadge () auf, wenn das Badge angezeigt werden soll. Wenn Sie das Abzeichen löschen möchten, können Sie auch 0 setzen. Wenn es sich also um den in ↑ geschriebenen Code handelt Es ist in Ordnung, wenn Sie clearIconBadge () aufrufen.
Ich werde es auch für die Kotlin-Sprache veröffentlichen. Fügen Sie das erstellte Dienstprogramm so ein, wie es ist.
class Utility {
companion object {
/**
*Löschen Sie das Symbolabzeichen.<br>
** Setze 0
*
* @param Kontext Kontext
*/
fun clearIconBadge(context: Context) {
setIconBadge(context, 0)
}
/**
*Setzen Sie ein Abzeichen auf das Symbol.
* @param Kontext Kontext
*
* @param count badge Nummer, die angezeigt werden soll
*/
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)
}
/**
*Ruft den Klassennamen der laufenden App ab.
*
* @param context Kontext.
* @Rückgabe Klassenname der laufenden App<br></br>
* *Null, wenn es nicht normal erhalten werden kann.
*/
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