当前位置: 动力学知识库 > 问答 > 编程问答 >

android - push notification doesn't show number of messages

问题描述:

I'm following this tutorial and its working fine, but problem is: it shows only the last message and all previous are removed. If I sent 3 messages from the server, it does not show number count as (3) in notification bar. It only displays the last message (all previous are deleted) as well.

public class MainActivity extends Activity {

// label to display gcm messages

TextView lblMessage;

// Asyntask

AsyncTask<Void, Void, Void> mRegisterTask;

// Alert dialog manager

AlertDialogManager alert = new AlertDialogManager();

// Connection detector

ConnectionDetector cd;

public static String name;

public static String email;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

cd = new ConnectionDetector(getApplicationContext());

// Check if Internet present

if (!cd.isConnectingToInternet()) {

// Internet Connection is not present

alert.showAlertDialog(MainActivity.this,

"Internet Connection Error",

"Please connect to working Internet connection", false);

// stop executing code by return

return;

}

// Getting name, email from intent

Intent i = getIntent();

name = i.getStringExtra("name");

email = i.getStringExtra("email");

// Make sure the device has the proper dependencies.

GCMRegistrar.checkDevice(this);

// Make sure the manifest was properly set - comment out this line

// while developing the app, then uncomment it when it's ready.

GCMRegistrar.checkManifest(this);

lblMessage = (TextView) findViewById(R.id.lblMessage);

registerReceiver(mHandleMessageReceiver, new IntentFilter(

DISPLAY_MESSAGE_ACTION));

// Get GCM registration id

final String regId = GCMRegistrar.getRegistrationId(this);

// Check if regid already presents

if (regId.equals("")) {

// Registration is not present, register now with GCM

GCMRegistrar.register(this, SENDER_ID);

} else {

// Device is already registered on GCM

if (GCMRegistrar.isRegisteredOnServer(this)) {

// Skips registration.

Toast.makeText(getApplicationContext(),

"Already registered with GCM",Toast.LENGTH_LONG).show();

} else {

// Try to register again, but not in the UI thread.

// It's also necessary to cancel the thread onDestroy(),

// hence the use of AsyncTask instead of a raw thread.

final Context context = this;

mRegisterTask = new AsyncTask<Void, Void, Void>() {

@Override

protected Void doInBackground(Void... params) {

// Register on our server

// On server creates a new user

ServerUtilities.register(context, name, email, regId);

return null;

}

@Override

protected void onPostExecute(Void result) {

mRegisterTask = null;

}

};

mRegisterTask.execute(null, null, null);

}

}

}

/**

* Receiving push messages

* */

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);

// Waking up mobile if it is sleeping

WakeLocker.acquire(getApplicationContext());

/**

* Take appropriate action on this message

* depending upon your app requirement

* For now i am just displaying it on the screen

* */

// Showing received message

lblMessage.append(newMessage + "\n");

Toast.makeText(getApplicationContext(), "New Message: " + newMessage,

Toast.LENGTH_LONG).show();

// Releasing wake lock

WakeLocker.release();

}

};

@Override

protected void onDestroy() {

if (mRegisterTask != null) {

mRegisterTask.cancel(true);

}

try {

unregisterReceiver(mHandleMessageReceiver);

GCMRegistrar.onDestroy(this);

} catch (Exception e) {

Log.e("UnRegister Receiver Error", "> " + e.getMessage());

}

super.onDestroy();

}

}

网友答案:

While posting the notification using notificationManager.notify(0, notification), the first parameter is notification id i.e if you post multiple notification using same id those will be replace with latest one.

If you don't want to replace notifications, generate random number for every notification and use that while posting.

网友答案:

Hope this helps :

private static void generateNotification(Context context, String message, String query)              {

         int icon = R.drawable.icon;
    long when = Calendar.getInstance().getTimeInMillis();
    String appname = context.getResources().getString(R.string.app_name);
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    Notification notification;

    Intent intent = new Intent(context, activity.class);


    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            intent, 0);

            NotificationCompat.Builder builder = new NotificationCompat.Builder(
                    context);
            notification = builder.setContentIntent(contentIntent)
                    .setSmallIcon(icon).setTicker(appname).setWhen(when)
                    .setAutoCancel(true).setContentTitle(appname)
                    .setContentText(message).build();

            notificationManager.notify((int) when, notification);


    }
分享给朋友:
您可能感兴趣的文章:
随机阅读: