如何获取试图在 Android 中绑定我的服务的客户端 ID

How to get the client id which is trying to bind my service in Android

我已阅读下面的帖子 link。但这太旧了,许多人以各种可能性说。 How to get application package name or UID which is trying to bind my service from onBind function?

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

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

官方 android onBind 方法不支持您了解调用者,因为您的服务旨在为所有客户端提供类似的行为。您可以尝试一些解决方法,其中 may/may 无法像下面的 Android 进度那样工作。

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

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

activity

中的代码
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)