2014-02-20 108 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);