使用Firebase在Android推送通知中设置徽章计数?

问题描述:

我已经使用FCM构建推送通知,现在我需要在应用程序图标上制作徽章计数器。 所以当我有未读的通知时,它会被计数。如果我阅读/触摸通知栏上的通知,它会减少数量。使用Firebase在Android推送通知中设置徽章计数?

下面的图片显示了我需要使用的东西。

Notification Badge Count

+0

? –

+0

@PatelPinkal是的,我想在应用程序图标上显示它。有任何想法可以做到吗?或者有可能? – Yuw

+0

它的唯一可能的部件不在应用程序图标,三星电话提供默认的通知柜台徽章 –

首先创建notyfy.xml

 <?xml version="1.0" encoding="utf-8"?> 
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/counterPanel" 
    android:layout_width="32dp" 
    android:layout_height="32dp" 
    android:background="@drawable/bell"> 

    <RelativeLayout 
     android:id="@+id/counterValuePanel" 
     android:layout_width="wrap_content" 
     android:layout_gravity="end" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@+id/counterBackground" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/ic_badge" /> 

     <TextView 
      android:id="@+id/count" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="1" 
      android:textSize="15sp" 
      android:textStyle="bold" 
      android:layout_centerInParent="true" 
      android:textColor="@color/colorWhite" /> 
    </RelativeLayout> 
</FrameLayout> 

然后在绘制文件夹放在与你的问题的红色背景图片。 现在在菜单文件夹中创建菜单文件名称为home_main

 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
     <item android:id="@+id/action_settings" 
     android:title="title" android:icon="@drawable/bell" 
     app:showAsAction="always" /> 
     </menu> 
在活动

在您使用徽章计数把下面的代码

要显示的应用程序图标赖特
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class MainActivity extends ActionBarActivity { 

    public int count = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.home_main, menu); 
     final MenuItem setting = menu.findItem(R.id.action_settings); 
     setting.setIcon(buildCounterDrawable(count, R.drawable.bell)); 
     return true; 
    } 
    public Drawable buildCounterDrawable(int NotiCount,int backgroundImageId) { 
     LayoutInflater inflater = LayoutInflater.from(this); 
     View view = inflater.inflate(R.layout.noty_count, null); 
     view.setBackgroundResource(backgroundImageId); 
     NotiCount = ((VApp) getApplicationContext()).getNoty(); 
     VLogger.infoLog("NotiCount" + NotiCount); 
     if (NotiCount == 0) { 
    View counterTextPanel =  view.findViewById(R.id.counterValuePanel); 
      counterTextPanel.setVisibility(View.GONE); 
     } else { 
      TextView textView = (TextView) view.findViewById(R.id.count); 
      textView.setText(NotiCount + ""); 
     } 
    view.measure(View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED), 
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 

view.setDrawingCacheEnabled(true); 
view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); 
view.setDrawingCacheEnabled(false); 

return new BitmapDrawable(getResources(), bitmap); 
    } 




    @Override 
    protected void onResume() { 
     super.onResume(); 
     invalidateOptionsMenu(); 
    } 
} 
+0

@Yuw。试试这个。 –

+1

他希望应用程序图标上的徽章计数器不在应用程序内 –