【问题标题】:broadcast Intent / receiver广播意图/接收器
【发布时间】:2018-06-11 07:15:21
【问题描述】:

在我的应用程序中,我有一个广播接收器(在清单中注册)类,我想从该类向 MainActivity 发送一个 Intent。因此,我在 MainActivity 和 Intent Filter 中有另一个广播接收器(动态注册)。但我没有收到主要活动中的意图。 这是代码:

public class SmsReceiver extends BroadcastReceiver {

    public static final String SMS_BUNDLE = "pdus";

    public SmsReceiver(){

    }
        String TAG = SmsReceiver.class.getSimpleName();
        @Override
        public void onReceive(Context context, Intent intent){
            Bundle bundle = intent.getExtras();

            if (bundle != null) {
                Object[] sms = (Object[]) bundle.get(SMS_BUNDLE);
                String str = "";

                for (int i=0; i < sms.length; i++) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
                    String smsbody = smsMessage.getMessageBody().toString();
                    str += smsbody;
                }
                Intent bcIntent = new Intent();
                bcIntent.setAction("SMS_RECEIVED_ACTION");
                bcIntent.addCategory(Intent.CATEGORY_DEFAULT);
                bcIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
                bcIntent.putExtra("message", str);
                context.sendBroadcast(bcIntent);
            }
        }
    }

在 MainActivity 中:

public class MainActivity extends AppCompatActivity
{
public boolean receivedSMS;
public String displaySMS;

  private BroadcastReceiver iReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    String qqq = intent.getExtras().getString("message");
    info2(intent.getExtras().getString("message"));
    evalMsg(qqq);
  }
};

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    graphInit();
    timerInit();
    smnInit();

  }

  @Override
  protected void onResume(){

  super.onResume();
  IntentFilter iFilter = new IntentFilter();
    iFilter.addAction("SMS_RECEIVED_ACTION");

    registerReceiver(iReceiver, iFilter);

  }

  @Override
  protected void onPause(){
    unregisterReceiver(iReceiver);
    super.onPause();
  }

有谁知道为什么主活动中的广播接收器没有收到意图? TextView 中应该显示文本,但从未显示。感谢您的任何想法

【问题讨论】:

标签: java android


【解决方案1】:

当通过SmsReceiver 接收到意图时,您无法知道 Activity 是否已启动以及处于什么状态。 您应该考虑在您的SmsReceiver.onReceive() 中使用startActivity(android.content.Intent)。这样您就可以在Activity.onCreate 中使用相同的意图对象(只需调用getIntent() 方法)

但如果你想坚持你原来的双播设计,那么here is your answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多