it-swarm.com.de

Anzeigen der Anzahl der Benachrichtigungen im App Launcher-Symbol

samsung Galaxy Note 2 Android Version 4.1.2

Ich weiß, dass diese Frage schon einmal gestellt wurde und die Antwort nicht möglich war

So zeigen Sie den Ballonzähler über dem Anwendungsstartsymbol auf Android an

Trotzdem habe ich gestern die Facebook-App aktualisiert und es wurde ein Zähler für ungelesene Nachrichten und private Nachrichten angezeigt. Wie kommt es, dass Facebook App kann und ich kann das nicht für meine App?

facebook icon

enter image description here

samsung Galaxy Note 2 Android Version 4.1.2

180
Waqleh

Android ("Vanilla" Android ohne benutzerdefinierte Starter und Touch-Interfaces) erlaubt keine Änderung des Anwendungssymbols , da es versiegelt ist in der .apk fest, sobald das Programm kompiliert ist. Es gibt keine Möglichkeit, es mithilfe von Standard-APIs programmgesteuert in ein "Zeichenprogramm" zu ändern. Sie können Ihr Ziel erreichen, indem Sie ein Widget anstelle eines Symbols verwenden. Widgets sind anpassbar. Bitte lesen Sie diese: http://www.cnet.com/8301-19736_1-10278814-251.html und diese http://developer.Android.com/guide/topics/ appwidgets/index.html . Schauen Sie auch hier: https://github.com/jgilfelt/Android-viewbadger . Es kann dir helfen.

Wie für Ausweisnummern. Wie ich bereits sagte - es gibt keine Standardmethode dafür. Aber wir alle wissen, dass Android ein offenes Betriebssystem ist und wir können damit alles tun, was wir wollen. Die einzige Möglichkeit, eine Ausweisnummer hinzuzufügen, besteht darin, entweder Apps von Drittanbietern oder benutzerdefinierte Startprogramme zu verwenden oder Front-End-Touch-Schnittstellen: Samsung TouchWiz oder Sony Xperia-Schnittstelle. Andere Antworten verwenden diese Funktionen, und Sie können im Stapelüberlauf danach suchen, z. hier . Aber ich werde es noch einmal wiederholen: Es gibt keine Standard-API für diese und ich möchte sagen, es ist eine schlechte trainieren. Das Benachrichtigungssymbol der App ist ein iOS-Muster und sollte ohnehin nicht in Android Apps verwendet werden. In Andrioid gibt es eine Statusleiste Benachrichtigungen für diese Zwecke: http://developer.Android.com/guide/topics/ui/notifiers/notifications.html Also, wenn Facebook oder jemand anderes dies verwenden - Es ist kein gängiges Muster oder Trend, den wir berücksichtigen sollten. Aber wenn Sie trotzdem darauf bestehen und keine Widgets für den Startbildschirm verwenden möchten, schauen Sie bitte hier:

Wie fügt Facebook dem App-Symbol in Android Badge-Nummern hinzu?

Wie Sie sehen, ist dies keine tatsächliche Facebook-App, sondern TouchWiz. In Vanilla Android kann dies mit Nova Launcher http://forums.androidcentral.com/Android-applications/199709-how-guide-global-badge-notifications.html erreicht werden Wenn Sie also irgendwo Symbolabzeichen sehen, vergewissern Sie sich, dass es sich entweder um einen Drittanbieter-Launcher oder eine Touch-Oberfläche (Frontend-Wrapper) handelt. Möglicherweise wird Google diese Funktion irgendwann zur Standard-API Android hinzufügen.

114

Es funktioniert in Samsung TouchWiz Launcher

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;
}
91
ChangUZ

ShortcutBadger ist eine Bibliothek, die eine Abstraktionsebene über die Gerätemarke und den aktuellen Launcher hinzufügt und ein großartiges Ergebnis bietet. Funktioniert mit LG, Sony, Samsung, HTC und anderen benutzerdefinierten Startern.

Es gibt sogar eine Möglichkeit, die Badge Count auf dem Desktop von Pure Android Geräten anzuzeigen.

Das Aktualisieren der Badge Count im Anwendungssymbol ist so einfach wie das Aufrufen:

int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);

Es enthält eine Demo-Anwendung, mit der Sie das Verhalten testen können.

76
AlexGuti

Ich habe herausgefunden, wie dies für Sony-Geräte gemacht wird.

Ich habe darüber gebloggt hier . Ich habe auch eine separate SO Frage zu diesem hier gepostet.


Sony-Geräte verwenden eine Klasse mit dem Namen BadgeReciever.

  1. Deklarieren Sie die Berechtigung com.sonyericsson.home.permission.BROADCAST_BADGE in Ihrer Manifestdatei:

  2. Senden Sie ein Intent an das BadgeReceiver:

    Intent intent = new Intent();
    
    intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", "com.yourdomain.yourapp.MainActivity");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true);
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "99");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", "com.yourdomain.yourapp");
    
    sendBroadcast(intent);
    
  3. Getan. Sobald dieses Intent gesendet wurde, sollte der Launcher ein Abzeichen auf Ihrem Anwendungssymbol anzeigen.

  4. Um das Abzeichen wieder zu entfernen, senden Sie einfach eine neue Sendung, diesmal mit SHOW_MESSAGE auf false:

    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
    

Ich habe Details darüber ausgeschlossen, wie ich dies fand, um die Antwort kurz zu halten, aber es ist alles im Blog verfügbar. Könnte eine interessante Lektüre für jemanden sein.

12
Marcus

Dies ist ein Beispiel und die beste Methode, um ein Abzeichen auf dem Benachrichtigungsstartsymbol anzuzeigen.

Fügen Sie diese Klasse in Ihrer Anwendung hinzu

public class BadgeUtils {

    public static void setBadge(Context context, int count) {
        setBadgeSamsung(context, count);
        setBadgeSony(context, count);
    }

    public static void clearBadge(Context context) {
        setBadgeSamsung(context, 0);
        clearBadgeSony(context);
    }


    private static void setBadgeSamsung(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);
    }

    private static void setBadgeSony(Context context, int count) {
        String launcherClassName = getLauncherClassName(context);
        if (launcherClassName == null) {
            return;
        }

        Intent intent = new Intent();
        intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName);
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true);
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(count));
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());

        context.sendBroadcast(intent);
    }


    private static void clearBadgeSony(Context context) {
        String launcherClassName = getLauncherClassName(context);
        if (launcherClassName == null) {
            return;
        }

        Intent intent = new Intent();
        intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName);
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(0));
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());

        context.sendBroadcast(intent);
    }

    private 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;
    }


}

==> MyGcmListenerService.Java Verwenden Sie die BadgeUtils-Klasse, wenn eine Benachrichtigung eingeht.

public class MyGcmListenerService extends GcmListenerService { 

    private static final String TAG = "MyGcmListenerService"; 
    @Override
    public void onMessageReceived(String from, Bundle data) {

            String message = data.getString("Msg");
            String Type = data.getString("Type"); 
            Intent intent = new Intent(this, SplashActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                    PendingIntent.FLAG_ONE_SHOT);

            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

            NotificationCompat.BigTextStyle bigTextStyle= new NotificationCompat.BigTextStyle();

            bigTextStyle .setBigContentTitle(getString(R.string.app_name))
                    .bigText(message);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(getNotificationIcon())
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText(message)
                    .setStyle(bigTextStyle) 
                    .setAutoCancel(true)
                    .setSound(defaultSoundUri)
                    .setContentIntent(pendingIntent);

            int color = getResources().getColor(R.color.appColor);
            notificationBuilder.setColor(color);
            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);


            int unOpenCount=AppUtill.getPreferenceInt("NOTICOUNT",this);
            unOpenCount=unOpenCount+1;

            AppUtill.savePreferenceLong("NOTICOUNT",unOpenCount,this);  
            notificationManager.notify(unOpenCount /* ID of notification */, notificationBuilder.build()); 

// This is for bladge on home icon          
        BadgeUtils.setBadge(MyGcmListenerService.this,(int)unOpenCount);

    }


    private int getNotificationIcon() {
        boolean useWhiteIcon = (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop);
        return useWhiteIcon ? R.drawable.notification_small_icon : R.drawable.icon_launcher;
    }
}

Und klare Benachrichtigung von Präferenz und auch mit Badge Count

 public class SplashActivity extends AppCompatActivity { 
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_splash);

                    AppUtill.savePreferenceLong("NOTICOUNT",0,this);
                    BadgeUtils.clearBadge(this);
            }
    }
<uses-permission Android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
8
Jaydeep purohit