在单独的视图中显示所有待处理通知

时间:2013-02-23 14:04:07

标签: android notifications android-notifications

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

这是我的任务。

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

我的问题是......

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

  2. 点击通知时,我想在单独的活动中获取所有通知,就像收件箱中的邮件一样。

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

  4. 以下是我的主要活动......

    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");
        }
    }
    

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

1 个答案:

答案 0 :(得分:0)

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

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

.....

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

关于为每个通知启动不同的活动,您需要在调用notificationManager.notify(ID, notification);方法时为每个通知传递不同的“ID”,但请记住,如果您指定了不同的ID,则触发新通知将不会更新计数但添加一个新的通知。因此,单击按钮生成通知实际上会生成10个不同的通知。