android - 我的 onReceive 响应哪个请求?

标签 android sms arraylist android-pendingintent

我有一个联系人数组列表,其中包含电话号码和状态字段。我想更新成功发送结果的状态字段。

我什至尝试使用contacts.indexOf(c.getPhoneNumber()) 作为int requestCode 将ArrayList 项的索引传递到Pending Intent 中。我只是不知道如何判断哪条消息报告成功并更新我的联系人项目。

package com.example.SMS;

public class SendSMSActivity extends SMSActivity {

    private EditText smsMessageBody;
    private Button send_button;
    private SmsManager sms;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sendsmsactivity);

        setupViews();

    }

    private void setupViews() {

        smsMessageBody = (EditText) findViewById(R.id.smsText_editText1);
        broadcast_button = (Button) findViewById(R.id.sendsms_button);

        send_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (smsMessageBody.getText().toString().length() > 0 ) {
                    if (!getSendSMSApplication().getCurrentContacts().isEmpty()) {
                        sendSMSLoop();
                        Toast.makeText(getBaseContext(), R.string.messages_sent, Toast.LENGTH_SHORT).show();
                        getSendSMSApplication().setCurrentContacts(null);  //  Clear existing contacts after send
                        finish();
                    } else {
                        Toast.makeText(getBaseContext(), R.string.error_no_numbers, Toast.LENGTH_SHORT).show();
                    }   //  there are phone numbers to send to?
                } else {
                    Toast.makeText(getBaseContext(), R.string.error_no_message, Toast.LENGTH_SHORT).show();
                }   //  user entered a message?
            }
        });

    }

    protected void sendSMSLoop() {

        ArrayList<ContactItem> contacts = getSendSMSApplication().getCurrentContacts();

        for (ContactItem c:contacts) {
            sendSMS(c.getPhoneNumber().toString(), smsMessageBody.getText().toString(), contacts.indexOf(c.getPhoneNumber()));
        }

    }

    public void sendSMS(String phoneNumber, String message, int messageIndex)
    {        
        String SENT = "SMS_SENT";

        PendingIntent sentPI = PendingIntent.getBroadcast(this, messageIndex, new Intent(SENT), 0);


        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), R.string.sms_sent, Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        }, new IntentFilter(SENT));

        sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, null);

    }
}

最佳答案

我现在正在尝试自己做这件事。我猜您遇到了和我一样的问题,如果您发送多于 1 条消息,它们都会为所有 3 条消息返回相同的发送代码。我认为这里的技巧是“线程”每条消息,以便每个“线程”都有不同的返回代码。我不能保证这就是解决方案,但这是我下一步要解决此问题的路径。

希望这对您有所帮助,如果您解决了,也请告诉我。

关于android - 我的 onReceive 响应哪个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057880/

相关文章:

android - 取消注册广播后收听传入的短信 : nice feature or broadcastreciever's bug?

android - 如何在 TextView 中获取文本语言?

java - 循环遍历ArrayList

android - Android TV 应用中搜索球旁边的图标

java - 我该如何处理 res 文件夹中的 _DS_Store 文件?

android - 谷歌地图 Android Studio 不显示我的折线

android - 在 Android 中,NetworkInterface.getInterfaceAddresses() 需要 API 级别 9。如何使用 API 级别 8 执行此操作?

Android: "Choose which app to open this with"对话框中可用的 SMS 应用程序

java - 通过 JFrame 添加到 ArrayList 时出现 NullPointerException 错误

java - 如何将对象逐一添加到数组列表中以形成完整的列表