如何使用广播接收器在 android 和另一个进程之间进行通信

How to communicate between android and another process using broadcast receiver

我在 Activity 和我的清单中另一个进程中定义的服务之间注册 broadcastReceiver 时遇到问题。

我尝试了一些其他技巧,例如使用 handlersContentProvider 用于通信但它没有像我预期的那样工作,事实上我想连续获取数据。

这是我服务中的代码:

Intent locationIntent = new Intent("LocationIntent");
        locationIntent.setAction("updatedLocations");
        locationIntent.setClass(getApplicationContext(), MapBoxActivity.class);
        locationIntent.putExtra("list",updatedList);
        sendBroadcast(locationIntent);

我在 Activity 的 OnCreate 中注册了它:

updatedLocationBroadcast = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Timber.tag("localB").d("registered!");
                if (intent != null && intent.getAction() != null && intent.getAction().equals("updatedLocations")) {
                    sawLocationsList = (HashMap<Integer, MarkerItem>)intent.getSerializableExtra("list");
                    Timber.tag("sawL").d("updated" + sawLocationsList.toString());
                }
            }
        };
registerReceiver(updatedLocationBroadcast , new IntentFilter("updatedLocations"));

如我所料,我想查看我的 broadcastReceiver 寄存器和我的 Timber 日志 localB registered!,它们在我的接收器中定义,但它不起作用。

那么,在 Activity 和另一个 process 中定义的服务之间进行通信并持续获取数据的最佳方式是什么???

注意:我的服务从服务器获取数据,但服务器不是实时的,所以我通过使用 handlers.

定期向服务器请求来检查数据

but it doesn't work

那是因为你 over-specified 你的 Intent。替换:

    Intent locationIntent = new Intent("LocationIntent");
    locationIntent.setAction("updatedLocations");
    locationIntent.setClass(getApplicationContext(), MapBoxActivity.class);
    locationIntent.putExtra("list",updatedList);
    sendBroadcast(locationIntent);

与:

    Intent locationIntent = new Intent("updatedLocations");
    locationIntent.putExtra("list",updatedList);
    sendBroadcast(locationIntent);

不过请注意,任何应用都可以收听此广播。考虑在 Intent 上使用 setPackage() 来限制传送到您自己的应用程序。

What's the best way to communicate between Activity and Service defined in another process and getting data continuously?

如果我被迫进行这个过程分离,我会考虑Messenger

my service gets data from server but the server is not realTime so I check the data by requesting periodically to server using handlers.

多年来,这一直不是推荐的模式。请使用 WorkManager。或者,如果您无法采用 WorkManager(因为它是 AndroidX 的一部分),请使用 JobScheduler。在这两种方法中的任何一种中,您都可以摆脱第二个过程并大大简化您的通信。