首页 > 解决方案 > 为什么从活动传递到广播接收器时字符串值为空?

问题描述

我将一个值从活动传递给广播接收器:

我的活动代码:

String stringBuilder = "Hello";
String phone_no = "1234567890";

try{
     SmsManager sms = SmsManager.getDefault();

     sms.sendTextMessage(phone_no, null, stringBuilder, null, null);

     Intent broadcastIntent = new Intent(contacts.this, Receiver.class);

     broadcastIntent.putExtra("message",stringBuilder);

     sendBroadcast(broadcastIntent);

 }catch (Exception e) {
     e.printStackTrace();
 }

我的广播接收器代码:

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

         //String msg= intent.getStringExtra("message") //returns null

         Bundle bundle = intent.getExtras();

         if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {

             String msg= intent.getStringExtra("message") //returns null

             if (bundle != null){

                  Object[] pdus = (Object[]) bundle.get("pdus");

                  if (pdus.length == 0) {
                    return;
                  }

                  // large message might be broken into many
                  SmsMessage[] messages = new SmsMessage[pdus.length];
                  StringBuilder sb = new StringBuilder();
                  for (int i = 0; i < pdus.length; i++) {
                      messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                      sb.append(messages[i].getMessageBody());
                  }
                  String sender = messages[0].getOriginatingAddress();
                  String message = sb.toString();
                  
                if (message.equals(msg)) {
                    //do something
                }

              }
   
             Toast.makeText(context,message,Toast.LENGTH_SHORT).show(); //empty toast
    }
}

这是我的清单:

         <receiver
            android:name=".Receiver"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="2147483647" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

正如您所看到的key,在这两种情况下都是相同的,当从活动传递时,值仍然在我的广播接收器中返回 null。我已经没有关于如何将值从活动传递到广播接收器的想法。请帮我。

我只想检查在我的广播接收器中接收String message = sb.toString();到的消息 () 是否等于从活动 ( stringBuilder) 发送的消息。

标签: androidandroid-intent

解决方案


为什么我收到一个空吐司?

您的stringBuilder变量 - 您没有包含在代码中 - 为空。


推荐阅读