簡體   English   中英

廣播接收器未接收

[英]Broadcast Receiver not receiving

我知道這個問題經常出現,但是我已經仔細研究了大約20個堆棧溢出問題,但尚未找到解決方案。 我敢肯定這很簡單,我做錯了,但是我是Android的新手,這項工作大約需要7個小時。

一切正常,直到接收方被調用。 這是來自服務的電話

Intent intent = new Intent(getApplicationContext(), MainActivity.WatchReceiver.class);
intent.putStringArrayListExtra(CHANGEKEY, changedURLs);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);

現在是接收器,嵌套在主活動中

public class WatchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(null, "broadcast received");
        markAsChanged(intent.getStringArrayListExtra(WatchService.CHANGEKEY));
    }
}

還有主要活動的啟動功能,我在此處注冊接收器

@Override
protected void onStart() {
    super.onStart();
    // Bind to LocalService
    wr = new WatchReceiver();
    markedAsChanged = new ArrayList<Integer>();
    LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(wr, new IntentFilter());
    Intent intent = new Intent(this, WatchService.class);
    sc = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            wb = (WatchService.WatchBinder) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            wb = null;
        }
    };
    bindService(intent, sc, Context.BIND_AUTO_CREATE);
}

無論您是在Context (用於系統級廣播)上還是在LocalBroadcastManager實例(用於本地廣播)上調用registerReceiver() ,顯式Intents都不適用於registerReceiver() )。

代替:

  • 定義一個動作字符串(例如, final String ACTION="com.dellosa.nick.ITS_HUMP_DAY";

  • 創建要廣播的Intent時使用該動作字符串( new Intent(ACTION)

  • 創建IntentFilter時使用該操作字符串( new IntentFilter(ACTION)

暫無
暫無

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

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