当前位置: 首页 > 知识库问答 >
问题:

收到广播后,我无法从Intent获得数据

毕泽宇
2023-03-14

我正在写一个程序,用Android系统发送短信。单击“发送”按钮后,我想获得消息的状态,如“已发送”、“已送达”。这部分很好用。问题是,我想得到一个电话号码,信息被发送到该号码,并传送到内部广播。这是必要的,因为SMS可以同时发送给多个用户。我该怎么做?我试着把“不”放在意图上,并把它放进广播接收机,但它不起作用。以下是示例代码:

 public void sendSMS(final String message, final String tele) {
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    SMSStatus sentStatus = new SMSStatus();
    SMSDelivery deliveryStatus = new SMSDelivery();
    //broadcast these during send and delivery
    PendingIntent sentPI = PendingIntent.getBroadcast(SMS.this, 0, new Intent(SENT).putExtra("telephone", tele), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(SMS.this, 0, new Intent(DELIVERED).putExtra("telephone",tele), 0);

    registerReceiver(sentStatus, new IntentFilter(SENT));
    registerReceiver(deliveryStatus, new IntentFilter(DELIVERED));

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(tele, null, message, sentPI, deliveredPI);
}

和一个广播接收器:

class SMSStatus extends BroadcastReceiver {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            //Toast.makeText(SMS.this, "Sent to " + arg1.getExtras().getString("telephone"), Toast.LENGTH_LONG).show();
            String no = arg1.getExtras().getString("telephone");
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "Message sent " + no, Toast.LENGTH_SHORT).show();
                    break; 
                ...
           }
}

仅供参考,第一个代码在通过不同电话号码的循环中被调用。

共有1个答案

汪文光
2023-03-14

将您的sendSMS代码更改为:

public void sendSMS(final String message, final String tele) {
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    SMSStatus sentStatus = new SMSStatus();
    SMSDelivery deliveryStatus = new SMSDelivery();
    //broadcast these during send and delivery
   PendingIntent sentPI = PendingIntent.getBroadcast(SMS.this, 0, new Intent(SENT).putExtra("telephone", tele), PendingIntent.FLAG_UPDATE_CURRENT);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(SMS.this, 0, new Intent(DELIVERED).putExtra("telephone",tele), PendingIntent.FLAG_UPDATE_CURRENT);

    registerReceiver(sentStatus, new IntentFilter(SENT));
    registerReceiver(deliveryStatus, new IntentFilter(DELIVERED));

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(tele, null, message, sentPI, deliveredPI);
}
 类似资料:
  • 我正在尝试接收通过LAN电缆连接的FPGA发送的UDP广播数据包。FPGA向端口5001发送连续数据包。 我的python接收器代码很简单: 我使用Wireshark进行了检查,发现PC接收数据包。但是,我的Python代码没有。我还检查了从另一个本地python代码发送数据包的情况(发送到相同的地址和端口),并且我的接收器获得了这些数据包。

  • 我正在尝试接收raspberry PI上的UDP数据包。我已经创建了一个简单的java程序来连接网络。(我下面有所有相关代码) 我不能从广播中接收到任何东西,在一个覆盆子圆周率。但当我在另一台计算机上运行此代码时,我能够从广播中接收数据包。这让我相信java没有被授予创建套接字、绑定端口的权限,并且它不是代码,而是raspberry PI上的一种安全措施。 null 没有运气。如有任何建议或帮助,

  • 我已经检查了所有相关的问题,还没有找到这个问题的解决方案。所以这对我来说绝对是个新问题。 我所拥有的 我的观察 我已经彻底测试过了。重新启动设备后,接收器在my Nexus 5x(牛轧糖)、Nexus 6p(牛轧糖)、YU Yuphoria(Lollipop)中工作正常,但在my OnePlus 3(牛轧糖)和Mi 4i(Lollipop)中工作不正常。 同样的代码如何能在少数设备上完美地工作,而

  • 问题内容: 有人可以解释和之间的确切区别吗? 在什么情况下我们必须使用每个Receiver类? 问题答案: 和之间只有一个区别。 当您收到内部广播方法时, 假设, BroadcastReceiver : 它 不保证 该 CPU将保持清醒 ,如果你启动一些长时间运行的进程。CPU可能会立即回到睡眠状态。 WakefulBroadcastReceiver : 这是 保证 该 CPU将保持清醒 ,直到你

  • 在AndroidManifest中。xml我有一个: 我的广播文件: 我试图运行应用程序后关闭它在后台播放音乐。

  • 我正在尝试拥有自己的蓝牙kotlin实现,但遇到了一个问题。 我正在按照这里的kotlin教程启动一个用于扫描蓝牙设备的广播接收器。 问题是,当我试图从广播接收器将每个发现的设备添加到主活动范围内的可变列表中,以便将列表发送到颤振端时,我总是得到一个空值。 由于我是kotlin和android的新手,我无法真正理解我到底哪里出错了,以及我需要了解哪些概念才能做我需要做的事情。 Kotlin主要活动