2014-02-20 99 views
2

我使用以下代碼發送文本(預套件kat)。當我創建傳遞給smsManager的意圖時,我在意圖中添加了一個int額外值。在我打電話給intent.getIntExtra的廣播接收器中,它只是給我一個值0.任何想法爲什麼?廣播接收器onReceive未收到意向包

當我打印我在的onReceive到日誌的價值,它顯示的值是0,每次

這裏的發送代碼(這是一個for循環,所以「我」可以是任何東西0 - 10):

for (int i = 0; i < getSelectedNumbers().size(); i++) { 
      Log.d("Pete Debug", "Loop value of i = " + String.valueOf(i)); 

      String number = removeSpecialCharacters(getSelectedNumbers().get(i)); 
      String smsSending = "Sending to " + number + "... "; 
      Log.d("Pete Debug", smsSending); 

      statusItems = new SmsStatusItems(); 
      statusItems.setMessage(smsSending); 
      statusItems.setImage(R.drawable.clock); 
      smsStatusAdapter.add(statusItems); 

      Intent sentIntent = new Intent(SMS_SENT); 
      sentIntent.putExtra(SMS_SENT, i); 

      Intent deliveredIntent = new Intent(SMS_DELIVERED); 
      deliveredIntent.putExtra(SMS_DELIVERED, i); 

      mSmsManager.sendTextMessage(number, null, getFinalMessage(), 
        (PendingIntent.getBroadcast(getActivity(), 0, sentIntent, 0)), 
        (PendingIntent.getBroadcast(getActivity(), 0, deliveredIntent, 0))); 
     } 

和這裏的廣播接收器:

smsSentReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     int i = intent.getIntExtra(SMS_SENT, -1); 
     Log.d("Pete Debug", "Sent value of i = " + i); 

     switch (getResultCode()) { 
      case Activity.RESULT_OK: 
       smsStatusAdapter.getItem(i).setImage(R.drawable.pass); 
       smsStatusAdapter.notifyDataSetChanged(); 
       break; 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       smsStatusAdapter.getItem(i).setImage(R.drawable.fail); 
       smsStatusAdapter.notifyDataSetChanged(); 
       break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       smsStatusAdapter.getItem(i).setImage(R.drawable.fail); 
       smsStatusAdapter.notifyDataSetChanged(); 
       break; 
      case SmsManager.RESULT_ERROR_NULL_PDU: 
       smsStatusAdapter.getItem(i).setImage(R.drawable.fail); 
       smsStatusAdapter.notifyDataSetChanged(); 
       break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       smsStatusAdapter.getItem(i).setImage(R.drawable.fail); 
       smsStatusAdapter.notifyDataSetChanged(); 
       break; 
     } 
    } 
}; 
+0

「我」 是一個爲int循環,它是介於0到10之間的任何整數,那麼你需要什麼其他東西?查看我的編輯 – Psest328

+0

來自PendingIntent文檔:「人們犯的一個常見錯誤是創建多個PenttentIntent對象,其Intents僅在其」額外「內容中有所不同,期望每次都獲得不同的PendingIntent。」 我認爲會發生的事情是,你真的只創建一個PendingIntent,你一遍又一遍地檢索。 – marcone

回答

3

我認爲你應該添加FILL_IN_DATAPendingIntent.FLAG_UPDATE_CURRENT標誌:

mSmsManager.sendTextMessage(number, null, getFinalMessage(), 
        (PendingIntent.getBroadcast(getActivity(), 0, sentIntent,Intent.FILL_IN_DATA)), 
        (PendingIntent.getBroadcast(getActivity(), 0, deliveredIntent, Intent.FILL_IN_DATA))); 

,等待短信(RESULT_OK)發送另一個前收到:

for (int i = 0; i < getSelectedNumbers().size(); i++) { 
      Log.d("Pete Debug", "Loop value of i = " + String.valueOf(i)); 

      String number = removeSpecialCharacters(getSelectedNumbers().get(i)); 
      String smsSending = "Sending to " + number + "... "; 
      Log.d("Pete Debug", smsSending); 

      statusItems = new SmsStatusItems(); 
      statusItems.setMessage(smsSending); 
      statusItems.setImage(R.drawable.clock); 
      smsStatusAdapter.add(statusItems); 

      Intent sentIntent = new Intent(SMS_SENT); 
      sentIntent.putExtra(SMS_SENT, i); 

      Intent deliveredIntent = new Intent(SMS_DELIVERED); 
      deliveredIntent.putExtra(SMS_DELIVERED, i); 


      // This for waiting ;) put the other code here 
      registerReceiver(new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
       Toast.makeText(getBaseContext(), "SMS sent", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       Toast.makeText(getBaseContext(), "Generic failure", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       Toast.makeText(getBaseContext(), "No service", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NULL_PDU: 
       Toast.makeText(getBaseContext(), "Null PDU", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       Toast.makeText(getBaseContext(), "Radio off", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      } 
     } 
    }, new IntentFilter(SENT)); 




      mSmsManager.sendTextMessage(number, null, getFinalMessage(), 
          (PendingIntent.getBroadcast(getActivity(), 0, sentIntent,Intent.FILL_IN_DATA)), 
          (PendingIntent.getBroadcast(getActivity(), 0, deliveredIntent, Intent.FILL_IN_DATA))); 
      } 
+0

不幸的是,既沒有工作 – Psest328

+0

把更多的代碼關於你的我的變化和boucle ..所以價值是相同的「0」? – Smile2Life

+0

查看我的編輯。謝謝 – Psest328

1

一個事件 - 一個出手

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
        res_int, PendingIntent.FLAG_ONE_SHOT);