【问题标题】:Show Badge count on App icon in Android在 Android 中的应用程序图标上显示徽章计数
【发布时间】:2013-10-11 13:54:47
【问题描述】:

在我的 Android 应用程序中,我想在 ios 等应用程序图标中显示推送通知徽章计数。

如何在应用程序图标中显示徽章计数?

【问题讨论】:

    标签: android-notifications


    【解决方案1】:

    Android 没有此特定功能。

    另一种方法可能是有一个显示数字的通知,但应用程序图标本身在正常情况下无法使用。

    如果您真的想打破设计准则,您可以制作一个看起来像您的应用图标的小部件,并且小部件可以更好地控制它的绘制方式。已经发布了一些应用程序来为 Gmail、谷歌语音、标准消息应用程序执行此操作,以及电话应用程序的未接来电,它们伪装成常规应用程序图标,因此这是可能的。我真的不推荐这种方法,但它是可用的。

    【讨论】:

    • 谢谢。但小部件只是拖放到主屏幕??它没有放入应用程序屏幕。
    • 所以您想在应用打开时在应用图标上显示徽章计数?
    • 我可以在我的小部件提供程序中实现这个徽章计数。
    【解决方案2】:

    1。 使用 ShortcutBadger 库进行徽章计数

            dependencies {
                compile 'me.leolin:ShortcutBadger:1.1.4@aar'
            }
    

    2.

           public class MyFirebaseMessagingService extends FirebaseMessagingService {
    
                private static final String TAG = "MyFirebaseMsgService";
    
                Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    
                @Override
                public void onMessageReceived(RemoteMessage remoteMessage) {
    
                    // Check if message contains a data payload.
                    if (remoteMessage.getData().size() > 0) {
                        Log.d(TAG, "1. remoteMessage.getData().size() > 0");
                        Log.d(TAG, "Message data payload: " + remoteMessage.getData()); // {mobile=9458074124, name=Arvind}
                        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
                        Log.d(TAG, "Message getTitle: " + remoteMessage.getNotification().getTitle());
                        Map<String, String> notificationData1 = remoteMessage.getData();
    
                        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    
                        Log.d(TAG, sharedPreferences.getString("userid", "") + ".....id"+notificationData1.get("action"));
    
                        try {
    
                            if (notificationData1.get("actionID").equalsIgnoreCase(sharedPreferences.getString("userid", ""))) {
    
                            } else {
                                showNotificationForEvent(remoteMessage);
                                // }
    
                            }
    
    
                        }catch (Exception e)
                        {
                            e.printStackTrace();
                        }
    
                    }
    
                }
    
                // Show Notification for Attend,Like,Comment,Rate
    
                private void showNotificationForEvent(RemoteMessage remoteMessage) {
    
                    Log.d(TAG, "00. showNotificationForEvent");
    
                    Map<String,String> notificationData = remoteMessage.getData();
    
                    Intent resultIntent = new Intent(this, BubblesActivity.class);
                    resultIntent.putExtra("action", notificationData.get("action"));
                    resultIntent.putExtra("actionID", notificationData.get("actionID"));
    
                    resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, resultIntent,
                            PendingIntent.FLAG_ONE_SHOT);
    
                    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                            .setSmallIcon(R.drawable.ipray_appicon)
            //                .setColor(ContextCompat.getColor(this, R.color.textColor))
                            .setContentTitle(remoteMessage.getNotification().getTitle())
                            .setContentText(remoteMessage.getNotification().getBody()/*+Utils.getPrefrence(getApplicationContext(), Const.KEY_USER_ID)+"...id"*/)
                            .setAutoCancel(true)
                            .setSound(defaultSoundUri)
                            .setContentIntent(pendingIntent);
    
    
                    //Vibration   // new long[] { 1000, 1000, 1000, 1000, 1000 }
                    notificationBuilder.setVibrate(new long[]  {500,1000});
    
                    NotificationManager notificationManager =
                            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
                    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
                }
    
    
    
    
                //This method will return true if the app is in background.
                private boolean isAppIsInBackground(Context context) {
                    boolean isInBackground = true;
                    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
                    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) {
                        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
                        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                                for (String activeProcess : processInfo.pkgList) {
                                    if (activeProcess.equals(context.getPackageName())) {
                                        isInBackground = false;
                                    }
                                }
                            }
                        }
    
                    }
    
                    else {
                        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
                        ComponentName componentInfo = taskInfo.get(0).topActivity;
                        if (componentInfo.getPackageName().equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
    
                    return isInBackground;
                }
    
    
                @Override
                protected Intent zzae(Intent intent) {
    
                    //Log.e("intentdata","DataPayload zzae"+intentToString(intent));
    
                    return super.zzae(intent);
                }
    
                @Override
                public boolean zzag(Intent intent) {
    
                    Log.e("intentdata","DataPayload zzag==="+intentToString(intent).toString());
                    Log.e("intentdata","getData====="+intent.toString());
    
                   if( intent.hasExtra("totalprayerdue"))
                    {
                        ShortcutBadger.applyCount(getApplicationContext(), Integer.parseInt(intent.getStringExtra("totalprayerdue")));
                    }
    
                    return super.zzag(intent);
                }
    
                @Override
                public void zzm(Intent intent) {
                    Log.e("intentdata","DataPayload zzm"+intentToString(intent));
                    super.zzm(intent);
                }
    
                public static String intentToString(Intent intent) {
                    if (intent == null)
                        return "";
    
                    StringBuilder stringBuilder = new StringBuilder("action: ")
                            .append(intent.getAction())
                            .append(" data: ")
                            .append(intent.getDataString())
                            .append(" extras: ")
                            ;
                    for (String key : intent.getExtras().keySet())
                        stringBuilder.append(key).append("=").append(intent.getExtras().get(key)).append(" ");
    
                    return stringBuilder.toString();
    
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多