0

我喜欢通过通知服务将数据从 ServicesActivity.java 传递到 NotificationView.java。但是第一次传递的数据是正确的,当我向它发送另一个数据时,它并没有更新它以前的数据。正如你所看到的,下面的 logcat 输出,第一次,我将两个数据发送到通知中并输出它在 NotificationView.java 处传递是没有问题的。之后,我重新向其中发送三个数据,它在 NotificationView.java 处的输出仍然是两个数据。无论我将多少数据发送到通知中,它在 NotificationView.java 的输出仍然遵循它的第一次输出。这里是 logcat 输出:

11-21 10:42:03.645: D/String(25694): admin,admin
11-21 10:42:33.645: D/String(25694): admin,admin,admin
11-21 10:42:06.308: D/how(25694): admin,admin
11-21 10:42:36.518: D/how(25694): admin,admin

** Log.d("String",str) 位于 ServicesActivity.java 的 displayNotification() 中,Log.d("how",i) 位于 NotificationView.java。

服务活动.java

public class ServicesActivity extends Activity {

IntentFilter intentFilter;
int notification = 1;
String datapassed; 
String str = "";
String[] data;
int dlength;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_services);

    intentFilter = new IntentFilter();
    intentFilter.addAction(MyService.MY_ACTION);
    registerReceiver(intentReceiver, intentFilter);
}

public void startService(View view){
    startService(new Intent(getBaseContext(),MyService.class));
    Toast.makeText(getBaseContext(), "start",
            Toast.LENGTH_SHORT).show();
}

public void stopService(View view){
    stopService(new Intent(getBaseContext(),MyService.class));
    Toast.makeText(getBaseContext(), "stop",
            Toast.LENGTH_SHORT).show();
}


private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
    datapassed = intent.getStringExtra("DATAPASSED");
    if(datapassed.length()>0){

        data = datapassed.split("[*]");
        dlength = data.length;

        for(int i=0;i<dlength;i++){
            if(i==dlength-1){
                str += String.valueOf(data[i]);                 
            }else{
                str += String.valueOf(data[i]) + ",";
            }   
        }
        Log.d("dataServices",str);
        displayNotification();
            str = "";           
    }
    }
    };

    protected void displayNotification(){
        Intent i = new Intent(this,NotificationView.class);
        i.putExtra("notification", notification);
        i.putExtra("name",str);
        Log.d("String",str);
        PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);

        NotificationManager mnotis =(NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        Notification notis = new Notification(R.drawable.notices2,"Reminder:You have " + dlength + " new friend request",System.currentTimeMillis());
        notis.setLatestEventInfo(this,"Friend Request", str + "has sent you a friend request",pi);
        notis.vibrate = new long[]{100,250,100,500};
        mnotis.notify(0, notis);
    }
  }

NotificationView.java

public class NotificationView extends Activity{

String[] people;
ListView lv;
Button btn1,btn2;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);  
    NotificationManager mnotis =(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    mnotis.cancel(getIntent().getExtras().getInt("notificationID"));
    String i = getIntent().getExtras().getString("name");
    people = i.split("[,]");
    Log.d("how",i);

    lv= (ListView) findViewById(android.R.id.list);
    btn1 = (Button)findViewById(R.id.acceptbtn);
    btn2 = (Button)findViewById(R.id.closebtn);
    ArrayAdapter<String> list = new ArrayAdapter<String>(NotificationView.this,R.layout.friendlist_item, R.id.friend_name,people);
    lv.setAdapter(list); 

    btn2.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            finish();
        }
    });
}

}
4

1 回答 1

1

默认情况下,如果您只更改 extras,Android 将使用现有的 (cached) PendingIntent。使用该FLAG_UPDATE_CURRENT标志强制它创建一个具有指定附加功能的新标志。

http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT

于 2012-11-21T03:17:55.880 回答