重命名导出的意图服务

Rename exported Intent Service

我在同一台设备上有多个应用程序,其中一个有一个 IntentService,其他应用程序通过以下方式调用它:

 val intent = Intent()
 intent.component = ComponentName(APP_PACKAGE, INTENT_APP_SERVICE)
 intent.putExtras(key, value)
 context.startService(intent)

一切正常。

我的问题是,当我更改导出它的应用程序中的服务名称时会发生什么? 我是否也必须更改 INTENT_APP_SERVICE 以匹配新名称? 或者还有其他向后兼容的方法吗?

what happens when i change the name of the service in the app which exports it?

你完蛋了,除非你能以某种方式强迫每个用户更新你的每个应用程序。

Do i have to change the INTENT_APP_SERVICE to match the new name as well?

是的,考虑到您的设置。

Or is there another way to be backwards compatibility?

第 1 步:使用自定义 action

<intent-filter> 添加到 <service>

第 2 步:设置您的 startService() Intent 以使用该操作 plus setPackage(),而不是 ComponentName

现在,您服务的客户端独立于服务本身的名称,因此您可以毫无问题地重构或重命名该服务。