从 activity 向服务发送广播的正确方法是什么?

What is the proper way to send a broadcast from an activity to a service?

我有一个 activity 带有一个按钮,而不是将广播发送到辅助功能服务(它们在同一个应用程序中,但进程不同)。很抱歉,如果这已经回答了很多次,但我找不到合适的方法来做。要清楚我写的作品,但我不知道这是否是正确的方法。我在 activity:

中写了这个
Intent intent = new Intent("roastie_toastie");
sendBroadcast(intent);

并且在无障碍服务中写道:

IntentFilter intentFilter = new IntentFilter("roastie_toastie");
receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        
    }
};
registerReceiver(receiver, intentFilter);

是否需要向 intent 和 intentFilter 添加任何其他内容以确保此广播不消耗任何电池并且仅在应用程序内部发送和接收?

is there any way to also specify the sender's packageName for the receiver's IntentFilter so that it only listens to broadcasts from inside the app?

不,对不起。但是,如果这是一个应用程序,那么您不需要使用 registerReceiver().

大概,现在,在您的清单中,您有一个 <service> 元素,其中 android:process 使服务 运行 在与应用程序其余部分不同的进程中。您可以拥有一个具有相同 android:process 属性的 <receiver> 元素,使其 运行 在与服务相同的进程中。如果你有 <receiver> 也有 android:exported="false",那么只有你的应用可以向它发送广播。您的发送代码将使用明确的 Intent,标识特定的 BroadcastReceiver class.

一旦您通过 BroadcastReceiver 向服务进程广播,它和服务就可以通过一些常见的 process-wide 单例进行通信。