2013-10-04 113 views

回答

3

Android沒有這個特殊功能。

另一種方法是在通常情況下顯示數字,但應用圖標本身無法使用。

如果你真的想打破設計準則,你可以製作一個看起來像你的應用程序圖標的小部件,並且小部件可以更好地控制它的繪製方式。一些應用程序已經發布,爲Gmail,Google Voice,標準的消息應用程序執行此操作,並且未命名爲電話應用程序,並且它們僞裝成常規應用程序圖標,因此可以。我並不真的推薦這種方法,但它是可用的。

徽章
+0

日Thnx。但小部件只是拖放到主屏幕?它不是放置在應用程序屏幕上。 –

+0

因此,您想在應用程序打開時在應用程序圖標上顯示徽章數量? –

+0

是的。那可能嗎?? –

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

      } 
     } 
相關問題