【问题标题】:LocalBroadcastManager not receiving broadcasts in a ActivityLocalBroadcastManager 未在 Activity 中接收广播
【发布时间】:2016-10-06 20:46:28
【问题描述】:

我正在使用 LocalBroadcastManager 使用 APPLICATION CONTEXT 向我的活动和服务进行广播,如下所示:

public class CommonForApp extends Application{
    public void broadcastUpdateUICommand(String[] updateFlags,
                String[] flagValues) {
            Intent intent = new Intent(UPDATE_UI_BROADCAST);
            for (int i = 0; i < updateFlags.length; i++) {
                intent.putExtra(updateFlags[i], flagValues[i]);
            }

            mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
            mLocalBroadcastManager.sendBroadcast(intent);

        }}

现在在我的服务中使用侦听器,我正在调用 broadcastUpdateUICommand() ,如下所示:

public class mService extends Service {
    public BuildNowPLaylistListListener buildCursorListener = new BuildNowPLaylistListListener() {

            @Override
            public void onServiceListReady() {
    mApp.broadcastUpdateUICommand(
                        new String[] { CommonForApp.INIT_DRAWER},
                        new String[] {""});

            }}}

我正在我的 Activity 中接收广播,如下所示:

public class mActivity extends Activity{
    BroadcastReceiver mReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
           mtoast.showtext("in onreceive"); //toast to check 

                if (intent.hasExtra(CommonForApp.INIT_DRAWER))
                    initialiseDrawer();

    }};


}

mApp 是应用程序的实例。 CommonForApp 是我的应用程序类。

但在我的活动中,我没有收到任何广播(广播管理器是使用应用程序上下文初始化的)。

谁能建议我为什么在我的活动中没有收到广播? ..

.提前致谢!

【问题讨论】:

  • 投反对票的原因...Plz
  • 发送广播时Activity 是否正在运行?您确定在Activity 中使用正确的IntentFilter 注册接收器吗?还有,你为什么不直接从Service广播?
  • 活动中的消息注册在哪里?
  • @MikeM。是的活动正在运行;根据我的代码实现,我不能直接从服务广播。
  • @StepanMaksymov Sendbroadcast() 来自应用程序上下文,所以我不需要注册它。

标签: android android-activity service android-context localbroadcastmanager


【解决方案1】:

活动中:

protected BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, final Intent intent) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(intent.hasExtra("type")){
                    // Do some action
                }
            }
        });

    }
};

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("data-loaded"));
}

protected void onDestroy() {
    super.onDestroy();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}

然后你发送广播:

public static void sendBroadcastMessageDataLoaded(Context context, String dataType){
    Intent intent = new Intent("data-loaded");
    intent.putExtra("type", dataType);
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}

【讨论】:

  • BRoadcastreceiver 一段时间后无法工作......为什么会这样?
  • 内存不足时可以杀死activity)
  • @developer 我的服务中有一个广播接收器,并注意到在某些手机上,Android 会在一段时间后终止该服务 - 然后广播接收器停止工作:/
  • 取决于你如何启动服务,你可以在发送广播之前检查服务是否运行,如果没有运行,你可以启动它)
  • 你拯救了我的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多