Android状态栏通知中的自定义内容

时间:2012-06-07 21:36:59

标签: android notifications

我正在尝试从另一个活动中的textview获取内容以显示在通知栏消息中。它有效,但不正确。 textview中的字符串确实显示在通知中,我通过捆绑来自其他活动的textview的信息然后让通知管理器获取捆绑包来实现。当其他活动启动时会出现问题,它会触发通知,因为活动中的最后一块代码执行捆绑和发送,这会导致通知触发,忽略设置的触发时间。所以我的问题是让通知从另一个活动中获取字符串的最佳和最简单方法是什么?这是活动,这就是问题所在。它会自动发出通知:

    import java.io.IOException;

import android.app.Activity;
import android.app.NotificationManager;
import android.content.Intent;
import android.database.SQLException;
import android.os.Bundle;
import android.widget.TextView;

public class DBTest2 extends Activity {

String scrNote;
TextView showBV;
NotificationManager nm;
DBAdapter dba;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dbtest_2);
    showBV = (TextView) findViewById(R.id.getBK_TV);

    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    //---cancel the notification---
    try{
    nm.cancel(getIntent().getExtras().getInt("uID"));
    } catch (Exception e) {
        System.out.println("Error when cancelling: "+e.toString());
    }
    //---END cancel the notification---



    //---- SHOW IN NOTIFICATION------

    scrNote = showBV.getText().toString();
    Bundle moveScrNote = new Bundle();
    moveScrNote.putString("mSN", scrNote);
    Intent toNoteBody = new Intent(DBTest2.this, DisplayNotifications.class);
    toNoteBody.putExtras(moveScrNote);
    startActivity(toNoteBody);


    //---- END   SHOW IN NOTIFICATION------


}


}

这是通知管理员:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //---get the notification ID for the notification; 
    // passed in by the MainActivity---
    int uID = getIntent().getExtras().getInt("uniqueID");

    //---PendingIntent to launch activity
    Intent noteI = new Intent("com.vee.search01.DBTEST2");
    noteI.putExtra("uniqueID", uID);

    PendingIntent herroIntent = 
        PendingIntent.getActivity(this, 0, noteI, 0);

    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    long fireTime = System.currentTimeMillis();
    String noteTitle = "Notification Title";

    Bundle getNoteBody = getIntent().getExtras();
    String gotNoteBody = getNoteBody.getString("mSN");
    String noteBody = gotNoteBody;

    Notification note = new Notification(R.drawable.noteicon, noteTitle, fireTime);
    note.setLatestEventInfo(this, noteTitle, noteBody, herroIntent);
    note.defaults |= Notification.DEFAULT_SOUND;
    note.defaults |= Notification.FLAG_SHOW_LIGHTS;
    nm.notify(uID, note);
    finish();
}

}

1 个答案:

答案 0 :(得分:1)

在活动之间传输内容的最佳方式是通过Intent中的附加内容发送。

如果您要从活动A发出通知,并且想要在活动B中处理它, 然后在A中创建通知并插入一个包含Intent的PendingIntent来启动 B.当显示通知并且用户点击它时,应该触发B.

如果要将通知文本从B发送到A,请使用单独的Intent。

如果您尝试将通知Intent的文本发送给B并显示 通知,将文本放在Intent的附加内容中。

此外,如果您使用的是平台的最新版本,请阅读通知的参考文档。它已被弃用,有利于通过Notification.Builder创建通知。一个优点是您可以将通知设置为自动取消,因此您不必在代码中取消它。