0

我有一项活动和一项服务。我通过 AlramManager 在一段时间内在后台运行我的服务。我想要的是定期从服务内部活动接收数据。为此,我使用广播接收器,但它没有显示任何数据。

在我的服务中,我使用这种方法发送数据:

        private final void sendServiceActiveBroadcast(final boolean pActivate) {
        final Intent _intent = new Intent();
        _intent.setAction(BROADCAST_ACTION);
        _intent.addCategory("com.monday.worker_android.android.CATEGORY");
        _intent.putExtra("isactive", pActivate);

        NewService.this.sendBroadcast(_intent);
    }

并在 AsyncTask 类中使用它,例如:

      @Override
        protected void onPostExecute(String result) {
        Log.d("Post Execute", "Executed");
        super.onPostExecute(result);
        float[] arr = new float[30];
        if (round(distance(LATITUDE, LONGITUDE, lati, longi)) < 200) {
        Log.d("OnPostExecute", "In");
        sendServiceActiveBroadcast(true);
       }
  }

并尝试在我的活动中接收此信息,例如:

    private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        boolean value = intent.getBooleanExtra("isactive", false);
        if (value == true) {
            Toast.makeText(getApplicationContext(), "received",
                    Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(), " not received",
                    Toast.LENGTH_SHORT).show();
        }

    }
};

我在我的 onResume() 中拒绝它并在我的 onPause() 中取消它,例如:

@Override
protected void onResume() {
    IntentFilter filter = new IntentFilter();
    filter.addAction(NewService.BROADCAST_ACTION);
    registerReceiver(receiver, filter);     
    super.onResume();
    }

    @Override
    protected void onPause() {
    unregisterReceiver(receiver);
    super.onPause();
}

我只是检查一些教程并编写代码。我的应用程序在服务上运行良好,并且它完美地执行了 onPostExecute()。但它没有显示任何广播数据。

谁能建议我如何定期从服务中接收数据以及为什么我无法在这里接收数据以及我的错误。

谢谢你

4

1 回答 1

1
addCategory

是您代码中的问题。因为,在你的活动中你没有设置category属性,所以找不到引用。此外,如果没有类别,您可以将其发送到具有action属性的不同位置的多个接收者。

于 2013-09-19T11:54:59.957 回答