我通过AIDL机制暴露了一些API。 客户端需要绑定到AIDL并同步调用方法。 有没有办法可以检索客户端的Java包名?
例如,如果我将方法boolean isFooAvailable()公开为AIDL API,则从isFooAvalable的实现中,我可以确定绑定到AIDL服务的应用程序的Java包名称吗?
I am exposing some API through AIDL mechanism. Clients need to bind to the AIDL and call methods synchronously. Is there a way I can retrieve the client's Java package name?
For example, if I expose a method boolean isFooAvailable() as AIDL API, from within the implementation of isFooAvalable, can I determine the Java package name of the app that binds to the AIDL service?
最满意答案
是的,您可以在实现中找到包名称,如下所示:
IAidl.Stub mBinder = new IAidl.Stub() { @Override public boolean isFooAvailable() throws RemoteException { String pkgName = ""; int pid = Binder.getCallingPid(); ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo proc : processes) { if (proc.pid == pid) { pkgName = proc.processName; } } // package name of calling application package Log.e("Package Name", pkgName); return false; } }与UID相比,通过PID查找包名称是最佳方法。
Yes, you can find out the package name from within the implementation as follows :
IAidl.Stub mBinder = new IAidl.Stub() { @Override public boolean isFooAvailable() throws RemoteException { String pkgName = ""; int pid = Binder.getCallingPid(); ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo proc : processes) { if (proc.pid == pid) { pkgName = proc.processName; } } // package name of calling application package Log.e("Package Name", pkgName); return false; } }Finding package name through PID is the best approach compared to UID.
更多推荐
发布评论