Broadcast Receiver with sendMultiPartTextMessage

前端 未结 2 1499
心在旅途
心在旅途 2020-12-16 01:47

I\'ve been trying to get the status result code from sendMultipartTextMessage, the thing i don\'t understand is if the broadcast receiver works with sendTextMessage, why doe

相关标签:
2条回答
  • 2020-12-16 02:27

    Hi you are missing to mention brodcast receiver name in your intent.

    Please try below code it's working fine for me..

        ArrayList<PendingIntent> sentPendingIntents = new ArrayList<PendingIntent>();
        ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<PendingIntent>();
        PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0,
                new Intent(mContext, SmsSentReceiver.class), 0);
    
        PendingIntent deliveredPI = PendingIntent.getBroadcast(mContext, 0,
                new Intent(mContext, SmsDeliveredReceiver.class), 0);
        try {
            SmsManager sms = SmsManager.getDefault();
            ArrayList<String> mSMSMessage = sms.divideMessage(message);
            for (int i = 0; i < mSMSMessage.size(); i++) {
                sentPendingIntents.add(i, sentPI);
    
                deliveredPendingIntents.add(i, deliveredPI);
            }
            sms.sendMultipartTextMessage(phoneNumber, null, mSMSMessage,
                    sentPendingIntents, deliveredPendingIntents);
    
        } catch (Exception e) {
    
            e.printStackTrace();
            Toast.makeText(mContext, "SMS sending failed...",
                    Toast.LENGTH_SHORT).show();
        }
    

    Create a boardcast receiver for sent sms like below.

    public class SmsSentReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (getResultCode()) {
        case Activity.RESULT_OK:
            Toast.makeText(context,
                    "SMS Sent" + intent.getIntExtra("object", 0),
                    Toast.LENGTH_SHORT).show();
    
            break;
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            Toast.makeText(context, "SMS generic failure", Toast.LENGTH_SHORT)
                    .show();
    
            break;
        case SmsManager.RESULT_ERROR_NO_SERVICE:
            Toast.makeText(context, "SMS no service", Toast.LENGTH_SHORT)
                    .show();
    
            break;
        case SmsManager.RESULT_ERROR_NULL_PDU:
            Toast.makeText(context, "SMS null PDU", Toast.LENGTH_SHORT).show();
            break;
        case SmsManager.RESULT_ERROR_RADIO_OFF:
            Toast.makeText(context, "SMS radio off", Toast.LENGTH_SHORT).show();
            break;
        }
    }
    

    Create another broadcast receiver for sms deliver as below.

    public class SmsDeliveredReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent arg1) {
        switch (getResultCode()) {
        case Activity.RESULT_OK:
            Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show();
            break;
        case Activity.RESULT_CANCELED:
            Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show();
            break;
        }
    }
    

    }

    And finally declare receiver in manifest.

    <receiver android:name=".receiver.SmsSentReceiver" >
        </receiver>
        <receiver android:name=".receiver.SmsDeliveredReceiver" >
        </receiver>
    
    0 讨论(0)
  • 2020-12-16 02:46

    Try setting the IntentFilter to (SENT) instead of (SENT_ACTION). It is working fine for me.

    0 讨论(0)
提交回复
热议问题