2013-04-03 32 views
0

我已經創建了一個SMS調度程序應用程序,現在我正在嘗試向其添加多個調度功能。我所做的一切是用戶點擊一個按鈕(名爲scheduleSMSButton),代碼收集數據,即電話號碼,短信發送的文本和時間。之後,代碼創建一個內部類的對象,將上面的數據添加到調用構造函數中,然後啓動方法schedule多個警報中的錯誤

下面是該scheduleSMSButton代碼:

scheduleSMSButton.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 

    //getting the time. 
       long difference = targetCal.getTimeInMillis(); 
    //getting the text. 
       String smsData = smsText.getText().toString(); 
    //getting the phone number. 
       String smsAddressee = addressee.getText().toString(); 
    //new object of inner class and start schedule method on that object.  
       new SchedulingInProgress(difference, smsData, smsAddressee).schedule(); 

}}); 

這裏是內部類,我創建:

private class SchedulingInProgress{ 

     long timeToTrigger; 
     String data; 
     String addressee; 

     public SchedulingInProgress(long difference, String smsData, 
       String smsAddressee) { 
      timeToTrigger = difference; 
      data = smsData; 
      addressee = smsAddressee; 
      // TODO Auto-generated constructor stub 
     } 

     private void schedule(){ 
      Intent fireSendSMSClass = new Intent(getApplicationContext(), 
         SendSMS.class); 
       fireSendSMSClass.putExtra("smsData", data); 
       fireSendSMSClass.putExtra("smsAddressee", addressee); 

      PendingIntent pdi = PendingIntent.getActivity(getApplicationContext(), 
          0, fireSendSMSClass, PendingIntent.FLAG_ONE_SHOT); 

      AlarmManager newManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      newManager.set(AlarmManager.RTC_WAKEUP, timeToTrigger, pdi); 
     } 

    } 

的SendSMSClass什麼也不做,但是發送的消息。

我面臨的問題是,如果我在時間上安排的短信,說在時間19:00文本ABC,在另一個時間報警19:02小時文本XYZ ;然後在19:00時,發送短信與文本xyz。其他短信根本不發送。

我應該怎麼做才能解決這個問題?

謝謝。

回答

0

好的,我發現了這個錯誤。 問題是我一次又一次地使用相同的PendingIntent,即我使用了相同的requestCode(定義值爲0)。 訣竅是每次實例化PendingIntent時都使用不同的值。我用這個代碼,每次得到一個新的值:

int requestCode = (int)System.currentTimeMillis(); 

然後叫schedule方法是這樣的(我改變了內部類的構造函數):

new SchedulingInProgress(difference, smsData, smsAddressee, requestCode).schedule(); 

最後,SchedulingInProgress類看着像這樣:

private class SchedulingInProgress{ 

     long timeToTrigger; 
     String data; 
     String addressee; 
     int code; 

     public SchedulingInProgress(long difference, String smsData, 
       String smsAddressee, int requestCode) { 
      timeToTrigger = difference; 
      data = smsData; 
      addressee = smsAddressee; 
      code = requestCode; 
      // TODO Auto-generated constructor stub 
     } 

     private void schedule(){ 
      Intent fireSendSMSClass = new Intent(getApplicationContext(), SendSMS.class); 
      fireSendSMSClass.putExtra("smsData", data); 
      fireSendSMSClass.putExtra("smsAddressee", addressee); 


      PendingIntent pdi = PendingIntent.getActivity(getApplicationContext(), code, fireSendSMSClass, 
        PendingIntent.FLAG_ONE_SHOT); 

      newManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      newManager.set(AlarmManager.RTC_WAKEUP, timeToTrigger, pdi); 
     } 

    }