在android中我列出已安装的应用程序列表并存储在我的私有数据库中。在某些应用程序具有相同名称的情况下,示例中有4个名为Maps的应用程序,如果一个应用程序获得更新,则私有数据库中的其他3个应用程序记如何区分这些应用程序?我使用以下代码来获取已安装的应用程序列表。
PackageManager pm = this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> list = pm.queryIntentActivities(intent,
PackageManager.PERMISSION_GRANTED);
ArrayList<String> applist = new ArrayList<String>();
ArrayList<String> packlist = new ArrayList<String>();
for (ResolveInfo rInfo : list) {
packlist.add(rInfo.activityInfo.packageName);
applist.add(rInfo.activityInfo.applicationInfo.loadLabel(pm)
.toString());
}
答案 0 :(得分:0)
答案 1 :(得分:0)
您不应该按名称区分两个应用程序。某些应用程序甚至没有与它们相关联的名称(即它们是空的)。区分两个应用程序的唯一可靠方法是使用它们的包名(OS也大量使用它)。
另请注意,虽然程序包名称始终相同,但如果完全卸载应用程序并再次重新安装,则应用程序的UID可能会更改。
答案 2 :(得分:0)
我想补充一点这里没有提到的澄清。
虽然不能有两个具有相同包名称的应用,但是一个应用中可以有多个启动器活动,用户可以在启动器应用中看到这些活动。是的,正如您所注意到的,标准的“地图”应用程序(“com.google.android.apps.maps”包)有几个启动器活动,如“本地”,“导航”,“地图”。如果这些“应用程序”(或开发人员的活动)在一个应用程序包中实现,则对用户无关紧要。
活动名称(“com.google.android.maps.MapsActivity”,您可以通过rInfo.activityInfo.name
检索此字符串)也不是唯一的,因为任何人都可以创建一个具有唯一包名称和活动的应用程序在java包com.google.android.maps中称为MapsActivity。
因此,如果要查找所有这些启动器活动的唯一标识符,则应使用应用包名称(“com.google.android.apps.maps”)和活动名称(“com.google.android”的组合.maps.MapsActivity“)。