如何知道哪个应用程序(上下文)启动/绑定了服务

时间:2015-02-03 16:55:07

标签: android service android-context

我有另一个包中的服务。 知道许多应用程序可以在同一设备中访问(绑定)此服务,如何知道哪个活动或应用程序(上下文)已启动或绑定该服务?

我以这种方式启动/绑定服务:

    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);
    }

有一种方法可以获取绑定服务的应用程序的上下文吗?

2 个答案:

答案 0 :(得分:0)

您可以从服务中call getCallingUid()和/或getCallingPid() Binder来尝试辨别调用请求的内容。

答案 1 :(得分:0)

您可以从Binder获得最佳的进程ID。

如果您要从流程ID中找到应用包名称,则必须搜索RunningAppProcessInfo.pid

的所有值的ActivityManager.getRunningAppProcesses()

但是,如果您同时编写服务和客户端代码,那么您可以为客户端代码编写一些额外的代码,以便在连接后识别上下文。