2014-12-20 32 views
0

我跟着這些tutorial,我得到了通知。但我想設置計數並使其與圖標可見,並且我想拖動和關閉通知,如Facebook。如何在通知區域和桌面通知(如Facebook)中設置通知計數?

這是我的代碼。爲了增加通知我按照這個link

@Override 
    public void onCreate() { 
    super.onCreate(); 
    context = this; 
    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
    Bitmap bm = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ic_launcher); 
    chatHead = new ImageView(this); 
    chatHead.setImageBitmap(getCircleBitmap(bm, 200)); 
    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.WRAP_CONTENT, 
     WindowManager.LayoutParams.WRAP_CONTENT, 
     WindowManager.LayoutParams.TYPE_PHONE, 
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     PixelFormat.TRANSLUCENT); 

    params.gravity = Gravity.TOP | Gravity.LEFT; 
    params.x = 0; 
    params.y = 100; 
    setBadge(context, count++); 
    chatHead.setOnTouchListener(new View.OnTouchListener() { 
      private int initialX; 
      private int initialY; 
      private float initialTouchX; 
      private float initialTouchY; 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      // TODO Auto-generated method stub 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
       initialX = params.x; 
       initialY = params.y; 
       initialTouchX = event.getRawX(); 
       initialTouchY = event.getRawY(); 

       return true; 
       case MotionEvent.ACTION_UP: 
       return true; 
       case MotionEvent.ACTION_MOVE: 
       params.x = initialX + (int) (event.getRawX() - initialTouchX); 
       params.y = initialY + (int) (event.getRawY() - initialTouchY); 
       windowManager.updateViewLayout(chatHead, params); 

       return true; 
      } 
      return false; 
     } 
    }); 
    windowManager.addView(chatHead, params); 

    } 
    public static void setBadge(Context context, int count) { 
     String launcherClassName = getLauncherClassName(context); 
     if (launcherClassName == null) { 
      return; 
     } 
     Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); 
     intent.putExtra("badge_count", count); 
     intent.putExtra("badge_count_package_name", context.getPackageName()); 
     intent.putExtra("badge_count_class_name", launcherClassName); 
     context.sendBroadcast(intent); 
    } 

    public static String getLauncherClassName(Context context) { 

     PackageManager pm = context.getPackageManager(); 

     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_LAUNCHER); 

     List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); 
     for (ResolveInfo resolveInfo : resolveInfos) { 
      String pkgName = resolveInfo.activityInfo.applicationInfo.packageName; 
      if (pkgName.equalsIgnoreCase(context.getPackageName())) { 
       String className = resolveInfo.activityInfo.name; 
       return className; 
      } 
     } 
     return null; 
    } 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 
    @Override 
    public void onDestroy() { 
    super.onDestroy(); 
    if (chatHead != null) windowManager.removeView(chatHead); 
    } 
    private Bitmap getCircleBitmap(Bitmap bitmap, int pixels) { 
     final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
     bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     final Canvas canvas = new Canvas(output); 
    // int pixels; 
     final int color = 0xff424242; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
     final RectF rectF = new RectF(rect); 
     final float roundPx = pixels; 
     paint.setShadowLayer(2, 2, 2, 0xff424242); 
     paint.setAntiAlias(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 
     canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, rect, rect, paint); 

     bitmap.recycle(); 

     return output; 
    } 

我也想使其可見與GCM通知計數。我用GCM消息設置了計數。但它不可見。

private void sendNotification(String msg) { 
    int numMessages = 0; 
    Intent inservice = new Intent(this, ChatService.class); 
    startService(inservice); 
    mNotificationManager = (NotificationManager) this 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MainActivity.class), 0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
      this).setSmallIcon(R.drawable.ic_stat_gcm) 
      .setContentTitle("Contact Received") 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
      .setContentText(msg) 
      .setDefaults(Notification.DEFAULT_VIBRATE) 
      .setNumber(numMessages++) 
      .setSound(Uri.parse("android.resource://" + getPackageName() + "/" +R.raw.sounds1)); 
    mBuilder.setContentIntent(contentIntent); 
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
} 

任何人都可以給我一些工作的例子嗎?

回答

0

我不認爲有一種方法可以做到這一點,如果你的意思是它是在通知窗口。如果它在通知窗口中,則應考慮使用number attribute進行通知。

如果你堅持使用像元素的徽章,你可以檢查出Android ViewBadger,但我不認爲你可以在您的通知窗口使用。