Показывать счетчик значков на значке приложения в Android
В моем приложении для Android я хочу показать количество значков push-уведомлений на значке приложения, например ios.
Как я могу показать количество значков в значке приложения?
2 ответа
Android не имеет этой конкретной функции.
Альтернативой может быть уведомление, в котором отображается номер, но при нормальных обстоятельствах значок приложения сам по себе не работает.
Если вы ДЕЙСТВИТЕЛЬНО хотели нарушить правила проектирования, вы можете создать виджет, который будет выглядеть как значок вашего приложения, и этот виджет получит гораздо больший контроль над тем, как он отображается. Некоторые приложения были выпущены для этого для Gmail, Google Voice, стандартного приложения Messaging, и пропустили вызов приложения Phone, и они маскируются под обычные значки приложений, так что это возможно. Я не очень рекомендую этот подход, но он доступен.
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();
}
}