Android 获取调用接口的包名
来源:互联网 发布:知乎怎么推送到kindle 编辑:程序博客网 时间:2024/06/06 09:05
在framework层,有时候,需要获取调用接口的包名,来针对apk做一些不同的处理逻辑。今天遇到通过PID来获取包名,结果不对,写这段代码的同事说这个他测试是正常的。
让我们来看下这段代码
private String getCallerProcessName() { if (null == mContext) { return ""; } int pid = Binder.getCallingPid(); ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE); for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) { if (processInfo.pid == pid) { Log.d(TAG, "processName: " + processInfo.processName); return processInfo.processName; } } return ""; }
基本上就是通过获取调用者的PID,通过遍历当前运行的app,来得到包名。而实际上,这段代码是有问题的,因为一个apk,并不一定只有一个进程,也即可能有多个PID。针对我测试的那种情况,调用的进程是app_process,所以遍历过后,并不能得到apk的包名,而我的同事的情况刚好只有一个进程,那自然就没问题了。
怎么修改呢?更准确的方法是使用UID来进行判断,我们知道,在android中,每一个进程都有且只有一个UID。
private String getCallerProcessName() { int uid = Binder.getCallingUid(); String callingApp = mContext.getPackageManager().getNameForUid(uid); Log.d(TAG, "callingApp: " + callingApp); if(callingApp != null){ return callingApp; } return ""; }
阅读全文
0 0
- Android 获取调用接口的包名
- android 6.0下获取当前调用接口的包名
- 获取接口调用者的包名
- 获取接口调用者的包名
- Android获取Apk的包名
- Android获取包名的方法
- Android获取包名的方法
- Java根据包名获取指定接口的所有实现
- 获取Android系统应用的包名以及应用名!
- 怎么获取调用者的包名, class name
- 怎么获取调用者的包名, class name
- 怎么获取调用者的包名, class name
- AudioTrack中获取调用应用的包名
- android中获取包名,类名
- 获取调用自己方法的使用者的包名和类名
- android获取正在运行的桌面的包名
- Android获取当前运营的APP的包名
- Android 获取应用系统程序的包名 PackageManager.
- 使用Jquery仿模态对话框插件Remodal实现弹出响应窗口
- PHPExcel简单操作
- 剑指offer之矩形覆盖
- 使用DES加密和解密的方法
- java利用正则表达式屏蔽特殊字符
- Android 获取调用接口的包名
- Scipy简洁介绍
- 用JS获取地址栏参数的方法
- 函数指针
- Glide生命周期
- Tensorflow实现卷积神经网络
- 电桥基础知识
- CSS布局 ——从display,position, float属性谈起
- AlexNet原理及Tensorflow实现