如何唯一标识Android应用程序

我正在使用TrafficStats Api并使用以下代码获取有关所有Android应用程序的信息

for (ApplicationInfo info : packageManager.getInstalledApplications(0)) {
int uid = info.uid;
CharSequence AppName = packageManager.getApplicationLabel(info);
String packageManager = packageManager.packageManager.getNameForUid(uid).split(":")[0];              }

但是当我记录这三个变量时.它给人混乱的结果.它们都不是唯一的.对于相同的Uid,许多应用程序都存在,并且在相同的包名称中,有许多应用程序.请参阅下面的日志输出

 AppName is:Phone   UID:1001 package: android.uid.phone
 AppName is:DM Command Service UID:1001 package: android.uid.phone
 AppName is:Dialer Storage  UID:1001 package: android.uid.phone
 AppName is:SIM Toolkit UID:1001 package: android.uid.phone

然后,如何识别应用程序.

解决方法:

Android使用程序包名称来唯一标识应用程序.您正在打印userId名称而不是包名称.如果您打印出包装名称,您应该会看到不同之处.试试这个:

String packageName = info.packageName;

至于你所看到的,Android应用程序可以配置为共享相同的签名和userId.所有这些设置都在AndroidManifest.xml中设置.

例如,手机应用程序具有此设置

package="com.android.phone"
android:sharedUserId="android.uid.phone"

电话提供商有此设置

package="com.android.providers.telephony"
android:sharedUserId="android.uid.phone"

请注意,它们共享相同的sharedUserId.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...