从 BroadcastReceiver 启动时发送 SMS 消息

Sending SMS messages from when BroadcastReceiver is started

我正在尝试在触发广播接收器时向联系人发送短信,但发送短信的方法似乎在广播接收器中不起作用(在 activity 中工作正常) - 它只向第一个联系人发送短信,然后就停止了。有人可以检查我的代码并告诉我问题出在哪里吗?

注意:我在 LogCat 中没有收到任何错误或警告。我在调用的 on receiver 方法中调用它(已检查有效)并且它只向第一个联系人发送短信,而不向其余联系人发送短信。

这是我的代码:

private void sendSMS(String message) {
        ArrayList<Contact> contacts = getContacts();
        Log.d(TAG, "sengind SMS message, contacts size: " + contacts.size());
        for (Contact contact : contacts) {
            try {
                sendSMSmsg(contact.getNumber(), message);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

public synchronized void sendSMSmsg(String phoneNumber, String message) {

        v.vibrate(50);
        ArrayList<PendingIntent> sentPendingIntents = new ArrayList<PendingIntent>();
        ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<PendingIntent>();
        PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,
                new Intent(context, SmsSentReceiver.class), 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0,
                new Intent(context, 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) {
            Log.e(TAG, "sending sms ERROR");
            e.printStackTrace();
        }
    }

这是 BroadcastListener 的常见行为。您不应该将它用于此类任务。您最好制作一个 Service 或 IntentService 并从您的 BroadcastListener 中启动 SMS 发送作业。这样它应该可以工作。