0

我已阅读以下链接中的主题。但这太老了,许多人以各种可能的方式说。 如何获取试图从 onBind 函数绑定我的服务的应用程序包名称或 UID?

我已根据需要更改了问题。我在应用程序中有一个绑定服务,两个客户端将使用 bindservice 绑定到我的服务。当应用程序尝试绑定此服务时,我想知道哪个应用程序试图在 onBind 函数中绑定我的服务?

在最新的 Android 版本中是否有更好的方法来获取试图在 onBind 函数中绑定我的服务的应用程序名称或 UID?

4

2 回答 2

0

官方的 android onBind 方法不支持您了解调用者,因为您的服务旨在为所有客户端提供相似的行为。您可以尝试一些解决方法,这些方法可能会/可能不会像下面的 Android 进程一样起作用。

 String callingApp = context.getPackageManager().getNameForUid(Binder.getCallingUid());

如果您想提供基于客户端的服务,那么如果客户端太多,那么为两个客户端创建两个不同的服务是一个不错的选择,那么这不是一个好的解决方案。您还可以通过添加签名权限来保护您的服务,以便您的服务将仅由预期的客户端调用。

于 2022-03-03T12:24:26.240 回答
0

活动内部代码

private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

并打电话给

isMyServiceRunning(MyService.class)
于 2022-03-03T13:13:24.983 回答