本地广播管理器使用主活动未收到的警报

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地广播管理器使用主活动未收到的警报相关的知识,希望对你有一定的参考价值。

我已经实现了一个报警管理器,它工作得非常好,并且每15分钟触发一次。现在我想使用闹钟每隔15分钟调用一次MainActivity方法。所以我使用本地广播公司到MainActivity(知道这是我手机上运行的当前活动)来传输订单以启动方法。但问题是MainActivity没有接收onReceive方法的数据。

报警

@Override
public void onReceive(Context context, Intent intent) {
    cont = context;
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();


    String url = intent.getExtras().getString("url");
    Log.w(TAG, "Service " + url);

    new GetJSON_val(){
        @Override
        protected String[] doInBackground(String... url) {
            Some Code...

        @Override
        protected void onPostExecute(String[] result) {
            Some Code...

            // I send the broadcast to main Activity
            Log.e("sender", "Broadcasting message");
            Intent intent = new Intent("custom-event-name");

            intent.putExtra("message", "This is my message!");

            LocalBroadcastManager.getInstance(cont).sendBroadcast(intent);

                }
            }
        }
    }.execute(url);


    // End of alarm code

    wl.release();
}

主要活动

  @Override
  public void onCreate(Bundle savedInstanceState) {
  ...
  LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("custom-event-name"));
   ...
}
   private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Get extra data included in the Intent
        String message = intent.getStringExtra("message");
        Log.e("receiver", "Got message: " + message);

    }
};

本地广播器是在postExecute方法的Alarm类中创建的。

答案

我认为问题是你在onReceive()执行长时间运行的任务并访问相同的context

你永远不应该在其中执行长时间运行的操作(在考虑阻止接收器和被杀死的候选者之前,系统允许超时10秒)。

  1. 要么你使用goAsync()
  2. 或者在任务完成后使用IntentService作为后台任务和sendBroadcast。

以上是关于本地广播管理器使用主活动未收到的警报的主要内容,如果未能解决你的问题,请参考以下文章

MainActivity 中的 Android 类没有收到来自警报管理器的广播

我如何将字符串从主要活动传递到带有警报管理器的广播接收器?

广播接收器没有收到额外的

AppWidget 警报管理器未更新

对话框会阻止其余代码执行吗?

Android:片段在活动结果合同中未收到 RESULT_OK