http://mobiforge.com/developing/story/sms-messaging-androidAmaçlardan birden çok yayın alma?
Yukarıdaki bağlantıda kullandığım örnek bağlantı kodunu SMS göndermek için kendi uygulamamda kullandım, ancak iletinin gönderilen durumunu denetlerken bir soruna rastlıyorum. Ne olursa olsun, göndermeye çalıştığım her mesaj için tost mesajı açılır. Yani temel olarak, daha önce 3 mesaj yolladığımı varsayalım. 4. mesajımı gönderdiğimde, tost mesajı 4 kez açılır. Görünüşe göre BroadcastReceiver, şu ana kadar kullanılan her amaçtan aynı yayını alıyor gibi görünüyor mu? Bunun neden olduğunu ya da nasıl durduracağını tam olarak anlayamıyorum. Herhangi bir yardım veya anlayış büyük takdir edilecektir!
İşte bu neden belirli bir yöntemdir:
//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
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));
//---when the SMS has been delivered---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
Sorunu çoğaltmak için gereken minimum kodu tamamlayabiliyor musunuz? –
Orijinal gönderiimi, – John