Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用PendingEvent将发送的SMS消息的数据传递给广播接收器?_Java_Android_Android Pendingintent_Smsmanager - Fatal编程技术网

Java 如何使用PendingEvent将发送的SMS消息的数据传递给广播接收器?

Java 如何使用PendingEvent将发送的SMS消息的数据传递给广播接收器?,java,android,android-pendingintent,smsmanager,Java,Android,Android Pendingintent,Smsmanager,我想在发送大量短消息时,将一些数据传递给广播接收器,以指示发送/传递的消息 我尝试使用带有不同标志的标准PendingIntent,但结果不正确(BroadcastReceiver总是获得意图的第一个/最后一个额外内容)。是否有人知道如何在使用smsmsmanager发送短信时将数据传递给BroadcastReceiver 发送短信的功能: private void sendSMS(SmsRequest _smsRequest) { Intent sentInt = new I

我想在发送大量短消息时,将一些数据传递给广播接收器,以指示发送/传递的消息

我尝试使用带有不同标志的标准
PendingIntent
,但结果不正确(BroadcastReceiver总是获得意图的第一个/最后一个额外内容)。是否有人知道如何在使用
smsmsmanager
发送短信时将数据传递给
BroadcastReceiver

发送短信的功能:

private void sendSMS(SmsRequest _smsRequest) {

        Intent sentInt = new Intent(SmsNotificationSending.SENT);
        sentInt.putExtra("SMS_ID", _smsRequest.getmId());

        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentInt, 0);

        Intent delivInt = new Intent(SmsNotificationSending.DELIVERED);
        delivInt.putExtra("SMS_ID", _smsRequest.getmId());

        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, delivInt, 0);

        registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
        registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));

        SmsManager
                .getSmsManagerForSubscriptionId(1)
                .sendTextMessage(_smsRequest.getmRecipientNumber(),
                        null,
                        _smsRequest.getmMessage(),
                        sentPI,
                        deliveredPI);
    }
My
BroadcastReceiver
类别:

public class DeliveryReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (getResultCode()) {
            case Activity.RESULT_OK:
                Log.d("sms", "Broadcast received: " + intent.getAction());
                Log.d("sms" ,"Sms was delivered" + intent.getIntExtra("SMS_ID", -1));
                break;
            case Activity.RESULT_CANCELED:
                Log.d("sms" ,"Sms was not delivered");
                break;
        }

    }
}
sendSms()
一个接一个地多次呼叫,在日志中我收到了许多本应收到的广播,但只有第一条
SMS\u ID
短信。
请帮帮我

此代码不符合您的要求:

    Intent sentInt = new Intent(SmsNotificationSending.SENT);
    sentInt.putExtra("SMS_ID", _smsRequest.getmId());
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentInt, 0);

    Intent delivInt = new Intent(SmsNotificationSending.DELIVERED);
    delivInt.putExtra("SMS_ID", _smsRequest.getmId());
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, delivInt, 0);
问题在于,此代码每次都重用相同的
pendingent
(它在extras中具有第一个SMS_ID)

每次执行此代码时,您需要创建一个新的
pendingent
。为此,您需要执行以下一项(或多项)操作:

  • 每次调用
    pendingent.getBroadcast()
    时,请使用不同的
    requestCode
    (第二个参数)
  • 每次在
    Intent
    中使用不同的操作(当您使用
    newintent(…)实例化
    Intent
    时,可以通过在操作中包含SMS\u ID来执行此操作)

这将确保每次都创建唯一的
pendingent
s,这将解决您的问题。

这似乎是不可能的。您使用不同的操作创建每个
pendingent
,并且该操作是一些随机数(
Long
值)。然后,您注册了一个接收器,当操作是固定字符串时,应该调用该接收器。
已发送
已发送
,无论它们是什么。由于这些内容不匹配,您的
广播接收器
永远不应该被调用!@DavidWasser对不起,我无意中发布了代码,我没有更改该内容,但谢谢。谢谢很多时候,你比我快一点,我刚开始自己写答案,因为我在两个月前解决了这个问题:D