0

可能这是一个幼稚的问题,但我是初学者,请不要认为是错误的问题。,我搜索了很多,我也在关注这个
http://developer.android.com/guide/topics/ui/notifiers/notifications.html教程。还有谷歌来解决我的问题,但我找不到。

这是我的任务。

我在主活动中有一个 EditText 和一个按钮,当我单击按钮时会生成一个通知,当我打开该通知时,另一个活动已打开,显示 Editext 数据,我已通过 EditText 在主活动中输入这些数据。

我的问题是......

  1. 我想在单个通知窗口中显示待处理通知的计数,如http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Updating 但我无法理解这一点 -->开始处理数据然后通知用户的循环...... 我怎样才能做到这一点。我如何处理数据以获取待处理计数。请记住,当没有通知时,此计数会减少???

  2. 单击通知时,我希望在单独的活动中获取所有通知,就像收件箱中的消息一样。

  3. 例如,在我的主要活动中,我点击了 10 次按钮,所以实际上在一个 count=10 的通知窗口中会生成 10 个通知,但它显示 count = 1?当我打开通知时,它只会在另一个活动中显示最新的通知内容,我如何在单个活动中显示剩余的 9 个?

下面在我的主要活动中......

Button btn;
EditText edtText;
NotificationCompat.Builder builder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn = (Button) findViewById(R.id.button);
    edtText = (EditText) findViewById(R.id.editText);

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            CreteNotification(Calendar.getInstance().getTimeInMillis(), edtText.getText().toString());
        }
    });

}

protected void CreteNotification(long when, String data) {

    String notificationContent ="Notification Content Click Here to go more details";
    String notificationTitle ="This is Notification";
    int number = 1;
    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
    int smalIcon =R.drawable.ic_launcher;
    String notificationData = data;

    Intent intent = new Intent(getApplicationContext(), MyNotificationClass.class);
    intent.putExtra("Message", notificationData);
    intent.putExtra("Time", Integer.toString((int) when) );
    intent.setData(Uri.parse("content://"+when));
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationManager notificationManager =(NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE); 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
            .setWhen(when)
            .setContentText(notificationContent)
            .setContentTitle(notificationTitle)
            .setSmallIcon(smalIcon)
            .setAutoCancel(true)
            .setTicker(notificationTitle)
            .setLargeIcon(largeIcon)
            .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_VIBRATE| Notification.DEFAULT_SOUND)
            .setContentIntent(pendingIntent);

    // Start of a loop that processes data and then notifies the user
    // how to loop??????????????????

    notificationBuilder.setNumber(++number);

    Notification notification = notificationBuilder.getNotification();
    notificationManager.notify(1, notification);

}

我想显示所有通知的代码??????

    HashMap<String, String> inboxMsg;
TextView notiTextView;
Button btn;
int Id;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_notification_class);

    inboxMsg =  new HashMap<String, String>();
    Id = 0;
    notiTextView = (TextView) findViewById(R.id.textView1);
    btn = (Button) findViewById(R.id.button1);

    btn.setOnClickListener(new OnClickListener() {  
        @SuppressWarnings("rawtypes")
        @Override
        public void onClick(View v) {

            Set<String> keys = inboxMsg.keySet();
            Iterator keyItra = keys.iterator();
            while (keyItra.hasNext()) {
                String k = (String) keyItra.next();
                String Message = inboxMsg.get(k);
                notiTextView.setText(Message);
            }
        }
    });

    if(savedInstanceState == null)
    {
        String Mesage  = getIntent().getExtras().getString("Message");
        String Time = getIntent().getExtras().getString("Time");
        inboxMsg.put(Integer.toString(++Id), "Message is " + Mesage + " Time " + Time + "\n");
    }
}

问题出在哪里,请将我重定向到正确的路径,也请指导我如何实现这一目标。

4

1 回答 1

0

您没有获得实际通知计数的原因是,每当CreteNotification(long when, String data)调用方法时,number 变量都设置为 1。可以通过在方法中将 number 设置为类成员变量而不是声明它来解决此问题。

Button btn;
EditText edtText;
NotificationCompat.Builder builder;
int number = 1;

.....

protected void CreteNotification(long when, String data) {
    .....
    notificationBuilder.setNumber(++number);
    ....
}

关于为每个通知启动不同的活动,您需要在调用方法时为每个通知传递不同的“ID” notificationManager.notify(ID, notification);,但请记住,如果您分配不同的 ID,触发新通知不会更新计数,而是添加新通知。所以点击生成通知的按钮实际上会生成10个不同的通知。

于 2013-02-23T14:26:40.727 回答