2013-09-30 10 views
5

si potrebbe pensare che questa è una domanda duplicata ma voglio che le risposte siano più specifiche di tutte le domande che sono simili a questo.aggiungendo il badge di notifica sull'icona dell'app in Android

prima dice che come Facebook ha un badge di notifica con dispositivo Samsung. How does Facebook add badge numbers on app icon in Android?. e si rivela essere il launcher touchscreen che potrebbe essere il launcher predefinito dei dispositivi Samsung. quando ho provato a testare il mio dispositivo Samsung con il launcher nova. ha bisogno di installare alcuni software di terze parti o Nova TestlaUnread.

Ecco il fatto. Pensavo che touchWiz aggiungesse un badge per tutte le applicazioni, ma quando provo a testare con la mia app per avere qualche notifica, non mostra alcun badge. come ho scoperto che Samsung TouchWiz mostrando solo applicazione per applicazione selezionata come detto qui: UI help for Notification on icon

The question is: is there any way to let know the touchWiz to add badge to my app-icon? Questo è per il dispositivo Samsung,

con quel argomenti precedenti, sembra che il programma di avvio di diversi fornitori sono la uno responsabile per i badge nell'icona di app in Android. Sony Experia utilizza Experia Home/Launcher come launcher predefinito. nel mio dispositivo Sony, avevano qualche distintivo in là sms o chiamate perse o facebook.

The question is: like the previous question, is there any way to let know experia home to add badge to my app icon?

perché stavo pensando che forse l'interazione con il programma di avvio sembra la soluzione di questo "distintivo aggiungendo icona dell'applicazione".

e c'è questa soluzione su questo alias di attività e che modifica l'icona dell'app di volta in volta che penso sia spazzatura. Is there a way to add a badge to an application icon in Android?

quindi sto cercando una soluzione per interagire con i lanciatori che è specifico del venditore.

'qualsiasi soluzione sarà apprezzato anche io vorrei andare in profondità con l'utilizzo di sviluppo nativo in Android'

Grazie a venire

+0

Sì ho scritto un how-to qui http://stackoverflow.com/questions/20136483/how-do-you-interface-with-badgeprovider -on-samsung-phones/20136484 # 20136484 –

+0

Possibile duplicato di [C'è un modo per aggiungere un badge all'icona di un'applicazione in Android?] (https://stackoverflow.com/questions/2905542/is-there-a- way-to-add-a-badge-to-an-application-icon-in-android) –

risposta

0

Oltre alla soluzione di Daniel Ochoa per Samsung (si veda il commento su OP), ho capito come è fatto per i dispositivi Sony.

Ho bloggato su di esso here. Ho anche pubblicato una domanda SO separata su questo here.


I dispositivi Sony utilizzano una classe denominata BadgeReciever.

  1. Dichiarare il permesso com.sonyericsson.home.permission.BROADCAST_BADGE nel file manifest:

  2. Broadcast un Intent al 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. Fatto. Una volta che questo Intent viene trasmesso, il programma di avvio dovrebbe mostrare un badge sull'icona della tua applicazione.

  4. Per rimuovere nuovamente il distintivo, è sufficiente inviare una nuova trasmissione, questa volta con SHOW_MESSAGE impostato su false:

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

Ho escluso i dettagli su come ho trovato questo per mantenere la risposta breve , ma è tutto disponibile nel blog. Potrebbe essere una lettura interessante per qualcuno.

+0

Poiché questa domanda non ha risposte e non hai un rep, non ho intenzione di contrassegnarlo (mi è stato dato il tuo rispondere alla revisione). Ti suggerisco di riempire la domanda con alcune informazioni rilevanti da quei collegamenti però. Ho votato la tua altra domanda in modo che tu possa rispondere. – OGHaza

+0

Grazie a @OGHaza. Ho aggiunto del codice a questa risposta e risponderò alla mia domanda principale al riguardo. – Marcus

+0

proverò questo. grazie .. – Vik2r

4

Uso questa classe per dispositivi Samsung e Sony (disponibile anche https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f). Non dimenticate di aggiungere <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" /> a AndroidManifest.xml

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; 
    } 
} 
+1

Ha funzionato bene per i dispositivi Samsung nel mio caso ma ora sembra che sia solo per dispositivi Samsung e Sony. Quindi, dobbiamo aggiornare questa risposta per farlo funzionare anche per altri produttori. – Harpreet

Problemi correlati