我有一个服务在另一个包中。如何知道哪个活动或应用程序(上下文)已经启动或绑定了该服务,知道许多应用程序可以在同一设备中访问(绑定)该服务?
我以这种方式启动/绑定服务:
private void initService() {
connection = new MyServiceConnection();
Intent i = new Intent();
i.setClassName("br.ufc.great.loccam", "br.ufc.great.loccam.service.SysSUService");
context.startService(i);
boolean ret = context.bindService(i, connection, Context.BIND_AUTO_CREATE);
Log.d(appId, "initService() bound with " + ret);
}
有没有一种方法可以获取绑定服务的应用程序的上下文?
您可以从服务中调用Binder
上的getCallingUid()
和/或getCallingPid()
,以尝试辨别调用请求的内容。
您最多可以从Binder获得进程id。
如果你想从进程id中找到应用程序包名称,你必须搜索ActivityManager.getRunningAppProcesses()
所有值的RunningAppProcessInfo.pid
但是,如果您同时编写服务和客户端代码,那么您可以为客户端代码编写一些额外的代码,以在连接后识别上下文。