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

时间:2018-01-15 10:00:01

标签: java android android-intent localbroadcastmanager

我已经实现了一个报警管理器,它工作得非常好,每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 方法的报警类中创建的。

1 个答案:

答案 0 :(得分:0)

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

  

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

解决方案

  1. 您使用goAsync()

  2. 或者在任务完成后使用IntentService作为后台任务和sendBroadcast。