Show Badge count on App icon in Android

拟墨画扇 提交于 2019-11-29 12:58:40

Android doesn't have this particular feature.

An alternative might be to have a notification that displays the number but the app icon itself is incapable under normal circumstances.

If you REALLY wanted to break design guidelines you could make a widget that looks like your app icon and the widget gets much more control over how it's drawn. Some apps have been released to do this for Gmail, Google Voice, the standard Messaging app, and missed called for the Phone app and they masquerade as regular app icons so it is possible. I don't really recommend this approach, but it is available.

1. use ShortcutBadger library for badges count

        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();

            }
        }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!