我已阅读以下链接中的主题。但这太老了,许多人以各种可能的方式说。 如何获取试图从 onBind 函数绑定我的服务的应用程序包名称或 UID?
我已根据需要更改了问题。我在应用程序中有一个绑定服务,两个客户端将使用 bindservice 绑定到我的服务。当应用程序尝试绑定此服务时,我想知道哪个应用程序试图在 onBind 函数中绑定我的服务?
在最新的 Android 版本中是否有更好的方法来获取试图在 onBind 函数中绑定我的服务的应用程序名称或 UID?
我已阅读以下链接中的主题。但这太老了,许多人以各种可能的方式说。 如何获取试图从 onBind 函数绑定我的服务的应用程序包名称或 UID?
我已根据需要更改了问题。我在应用程序中有一个绑定服务,两个客户端将使用 bindservice 绑定到我的服务。当应用程序尝试绑定此服务时,我想知道哪个应用程序试图在 onBind 函数中绑定我的服务?
在最新的 Android 版本中是否有更好的方法来获取试图在 onBind 函数中绑定我的服务的应用程序名称或 UID?
官方的 android onBind 方法不支持您了解调用者,因为您的服务旨在为所有客户端提供相似的行为。您可以尝试一些解决方法,这些方法可能会/可能不会像下面的 Android 进程一样起作用。
String callingApp = context.getPackageManager().getNameForUid(Binder.getCallingUid());
如果您想提供基于客户端的服务,那么如果客户端太多,那么为两个客户端创建两个不同的服务是一个不错的选择,那么这不是一个好的解决方案。您还可以通过添加签名权限来保护您的服务,以便您的服务将仅由预期的客户端调用。
活动内部代码
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)