簡體   English   中英

廣播意圖/接收者

[英]broadcast Intent / receiver

在我的應用程序中,我有一個廣播接收器(在清單中注冊)類,我想從中將Intent發送給MainActivity。 因此,我在MainActivity中有另一個廣播接收器(動態注冊)和一個意圖過濾器。 但是我沒有收到主要活動的意圖。 這是代碼:

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中顯示一個文本,但永遠不會顯示。 謝謝你的任何想法

通過SmsReceiver接收意圖時,您不知道活動是否啟動以及處於什么狀態。 您應該考慮在SmsReceiver.onReceive()使用startActivity(android.content.Intent) SmsReceiver.onReceive() 這樣,您將在Activity.onCreate使用相同的intent對象(只需調用getIntent()方法)

但是,如果您想堅持原始設計的雙重廣播,那么這就是您的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM