0
A
回答
3
Android没有这个特殊功能。
另一种方法是在通常情况下显示数字,但应用图标本身无法使用。
如果你真的想打破设计准则,你可以制作一个看起来像你的应用程序图标的小部件,并且小部件可以更好地控制它的绘制方式。一些应用程序已经发布,为Gmail,Google Voice,标准的消息应用程序执行此操作,并且未命名为电话应用程序,并且它们伪装成常规应用程序图标,因此可以。我并不真的推荐这种方法,但它是可用的。
徽章
1
1. 使用ShortcutBadger库计数
dependencies {
compile 'me.leolin:ShortcutBadger:[email protected]'
}
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();
}
}
相关问题
- 1. 在Android手机应用程序图标中显示徽章
- 2. 如何在应用程序图标或小工具中显示徽章计数
- 3. iPhone应用程序中的应用程序图标徽章
- 4. 在android的应用程序图标上添加通知徽章
- 5. 徽章计数未在iOS应用程序中显示
- 6. 如何使用Redmi上的应用程序图标显示徽章数量?
- 7. TideSDK - 显示未读数(图标徽章)
- 8. Windows Store Js应用程序:仅在锁屏上显示徽章,而不在活动图块上显示徽章
- 9. 在没有APNS的应用程序中显示Apple Alert徽章
- 10. 应用程序图标徽章计数显示2为第一次安装
- 11. 如何在我的android应用程序中的启动器图标上显示徽章计数?
- 12. 应用程序图标徽章数量不增加:Xcode中
- 13. 仅iOS徽章LocalNotification在后台应用程序中未显示
- 14. 在iPhone混合应用程序中显示徽章
- 15. Android - 如何在行动栏中显示应用程序徽标
- 16. 如何在Xamarin Forms中显示ToolBarItem图标的徽章计数
- 17. 应用程序徽章
- 18. 图书馆反应本机应用程序图标徽章
- 19. 何时需要移除android应用程序上的徽章图标计数?
- 20. 从iOS应用程序中删除徽章应用程序图标
- 21. 有没有办法将徽章添加到Android中的应用程序图标?
- 22. 如何使用pushNotification在Phonegap中的iOS应用程序中显示徽章?
- 23. 应用程序徽章不显示解析推送通知
- 24. 如何在Android应用程序(如iPhone)上创建通知图标徽章
- 25. 如何在iPhone或iPad上将图像显示为应用程序徽章?
- 26. Android:为我的应用程序内部的图标添加徽章
- 27. 我们可以显示像iPhone一样的android应用程序图标上的徽章号码吗?
- 28. 是否可以自定义应用程序图标徽章:Xcode?
- 29. 当通知到达时更改应用程序图标徽章
- 30. 不能摆脱应用程序图标徽章号
日Thnx。但小部件只是拖放到主屏幕?它不是放置在应用程序屏幕上。 –
因此,您想在应用程序打开时在应用程序图标上显示徽章数量? –
是的。那可能吗?? –