2016-07-31 1 views
2

Je suis en mesure de montrer le nombre de badges avec l'icône d'application sur les appareils Samsung avec le code ci-dessous -Comment afficher le nombre de badges avec l'icône de l'application sur Redmi?

<uses-permission android:name="com.sec.android.provider.badge.permission.READ" /> 
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" /> 

    Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); 
    intent.putExtra("badge_count", badgeCount); 
    intent.putExtra("badge_count_package_name", componentName.getPackageName()); 
    intent.putExtra("badge_count_class_name", componentName.getClassName()); 
sendBroadcast(intent); 

Mais je ne suis pas en mesure d'atteindre cet objectif sur les appareils redmi, bien que Facebook, WhatsApp etc sont capables. S'il vous plaît laissez-moi savoir si vous êtes au courant de l'intention d'action et les extras à utiliser pour la diffusion. Apprécier ton aide.

+0

avez-vous pu montrer des badges sur MI? Si oui, pouvez-vous s'il vous plaît partager comment le faire? –

Répondre

1

Peut-être, l'utilisateur doit activer explicitement l'option à partir des paramètres. Vérifiez ici pour référence: badge count on launcher icon

+1

Merci pour votre réponse. Vous avez raison, ils pourraient devoir activer, mais le défi auquel je suis confronté est que je ne suis pas capable de comprendre quelle chaîne de permission je dois utiliser et aussi quelle chaîne d'intention je dois définir, pour Redmi. Cela varie d'un fabricant à l'autre, comme je l'ai découvert avec Samsung, HTC et Sony. N'a pas pu trouver de documentation utile sur Redmi. –

0

code pour montrer badge sur Mi/xiomi mobiles

public static final String INTENT_ACTION = "android.intent.action.APPLICATION_MESSAGE_UPDATE"; 
public static final String EXTRA_UPDATE_APP_COMPONENT_NAME = "android.intent.extra.update_application_component_name"; 
public static final String EXTRA_UPDATE_APP_MSG_TEXT = "android.intent.extra.update_application_message_text"; 
private ResolveInfo resolveInfo; 

@Override 
public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { 
    try { 
     Class miuiNotificationClass = Class.forName("android.app.MiuiNotification"); 
     Object miuiNotification = miuiNotificationClass.newInstance(); 
     Field field = miuiNotification.getClass().getDeclaredField("messageCount"); 
     field.setAccessible(true); 
     try { 
      field.set(miuiNotification, String.valueOf(badgeCount == 0 ? "" : badgeCount)); 
     } catch (Exception e) { 
      field.set(miuiNotification, badgeCount); 
     } 
    } catch (Exception e) { 
     Intent localIntent = new Intent(
       INTENT_ACTION); 
     localIntent.putExtra(EXTRA_UPDATE_APP_COMPONENT_NAME, componentName.getPackageName() + "/" + componentName.getClassName()); 
     localIntent.putExtra(EXTRA_UPDATE_APP_MSG_TEXT, String.valueOf(badgeCount == 0 ? "" : badgeCount)); 
     if (BroadcastHelper.canResolveBroadcast(context, localIntent)) { 
      context.sendBroadcast(localIntent); 
     } 
    } 
    if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) { 
     tryNewMiuiBadge(context, badgeCount); 
    } 
} 

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
private void tryNewMiuiBadge(Context context, int badgeCount) throws ShortcutBadgeException { 
    if (resolveInfo == null) { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); 
    } 

    if (resolveInfo != null) { 
     NotificationManager mNotificationManager = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification.Builder builder = new Notification.Builder(context) 
       .setContentTitle("") 
       .setContentText("") 
       .setSmallIcon(resolveInfo.getIconResource()); 
     Notification notification = builder.build(); 
     try { 
      Field field = notification.getClass().getDeclaredField("extraNotification"); 
      Object extraNotification = field.get(notification); 
      Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); 
      method.invoke(extraNotification, badgeCount); 
      mNotificationManager.notify(0, notification); 
     } catch (Exception e) { 
      throw new ShortcutBadgeException("not able to set badge", e); 
     } 
    } 
} 

Ceci est du code copié de github d'une application ShortcutBadger sur project link(je n'ai pas idée de licence/autorisations pour l'utilisation de ce code)

Mi specific badge showing file code