从BroadcastReceiver启动时发送SMS消息

时间:2015-04-08 20:54:57

标签: android android-broadcast smsmanager

我正在尝试在触发广播接收器时向联系人发送短信,但发送短信的方法似乎无法在广播接收器中工作(其在活动中正常工作) - 它仅发送短信到第一次接触,然后停止。有人可以检查我的代码并告诉我这个问题是什么吗?

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

这是我的代码:

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();
        }
    }

1 个答案:

答案 0 :(得分:0)

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