Android如何从Notification中提取和检索数据

时间:2014-05-15 18:52:04

标签: android android-intent notifications

我正在编写android messenger。当应用程序最小化并且某些联系人写信给我时,会成功通知通知。如果两个联系人写入,则每个消息显示在不同的框中。 enter image description here

所以我需要放置然后获取联系人ID ..

这是我在应用程序中的代码,从那里抛出通知:

private void showNotification(Message m) {
    Contact temp = dbHelper.getContact(m.getPersonID());

    Intent notificationIntent = new Intent(getApplicationContext(), ChatActivity.class);
    notificationIntent.putExtra("prsID", m.getPersonID());
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);


    Notification.Builder builder = new Notification.Builder(this);
    builder.setTicker("Messenger: New Message");
    builder.setContentTitle(temp.getName());
    builder.setContentText(m.getMessage());
    builder.setSmallIcon(R.drawable.ic_launcher);


    if (temp.hasImage()){
        Bitmap bmp = BitmapFactory.decodeByteArray(temp.getImageByteArr(), 0, temp.getImageByteArr().length);
        builder.setLargeIcon(bmp);
    }

    Notification noti = builder.setContentIntent(pIntent).build();
    noti.flags = Notification.FLAG_AUTO_CANCEL;
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(temp.getId(), noti); 

}

这是ChatActivity中的代码,我正在尝试检索联系人ID:

@Override
protected void onResume() {
    super.onResume();

    if (this.guest != null){
        int prsid = getIntent().getIntExtra("prsID", -1);
        if (prsid != -1){
            this.guest = this.messageLoader.getContact(prsid);
            ContactForChat.getInstance().setContact(this.guest.getId());
        } else {
            this.guest = this.messageLoader.getContact(this.guest.getId());
            ContactForChat.getInstance().setCurrentID(this.guest.getId());
        }
        this.guest.setNewMessage(false);
        this.messageLoader.updateContact(guest);
    }

    if (this.messageLoader != null)
        this.messageLoader.chatOnPause(false);
}

但是int prsid = getIntent()。getIntExtra(“prsID”, - 1);总是返回-1

enter image description here

任何人都可以帮助我吗?怎么做得对? 提前谢谢你

更新

实际上,我猜getIntent()返回null: enter image description here

在ChatActivity中我必须覆盖一个方法(两个,a和ab都有正确的值):

@Override
protected void onNewIntent(Intent intent) {

    super.onNewIntent(intent);
    Bundle a = intent.getExtras();
    int ab = a.getInt("prsID");
    int b = intent.getIntExtra("prsID", -1);
}

3 个答案:

答案 0 :(得分:1)

我会采取刺戳并猜测m.getPersonID()返回长而不是int?所以你需要使用getIntent().getLongExtra("prsID", -1);

答案 1 :(得分:0)

showNotification方法中,制作第一个空白行Log.v("NOTIFICATION", "id = " + m.getPersonID());并确保在将其添加到附加内容时实际设置为-1以外的其他内容。此外,请确保m.getPersonID()的返回类型为int,而不是longdouble或其他一些数字。

答案 2 :(得分:-1)

要区分通知,您可以

您可以使用此

mManager.notify(0, notification); to  mManager.notify((int) when, notification);

,其中

 long when = System.currentTimeMillis();