相关疑难解决方法(0)

Android:如何获取已安装活动的列表,因为它们出现在启动器中,没有重复项

我正在编写一个应用程序,允许用户查看已安装的应用程序列表,选择其中一个,然后按计划启动它.使用stackoverflow中的教程,我设法弄清楚如何获取已安装活动的列表,它们的包名和图标(即这里 - 几种方法).以防万一,这就是我开始活动的方式,它完美无瑕,没问题:

Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
launchIntent.setAction(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);
Run Code Online (Sandbox Code Playgroud)

问题是检索已安装的应用程序列表.我找到了两种方法来获取已安装的应用程序列表:

1)使用

PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplication(PackageManager.GET_META_DATA) 
Run Code Online (Sandbox Code Playgroud)

apps您的每个元素中可以获得它的包名和包标签(应用程序名称).

2)使用

PackageManager pm = getPackageManager();    
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(mainIntent, 0);
for(ResolveInfo info : resolveInfos) {
    ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;
    //...
    //get package name, icon and label from applicationInfo object    
}
Run Code Online (Sandbox Code Playgroud)

一种方法存在问题:它返回所有已安装的软件包,包括系统服务,这些软件包可能不包含任何活动,因此无法启动.这是一个带有示例的屏幕截图: 带包的应用列表

上面没有图标的所有项目都无法启动.

第二种方法也存在问题:列表中的几个项目有重复项: 带有重复项的应用列表

当我在调试器中设置断点时,我看到这些"地图"项目具有不同的活动名称("com.google.android.maps.MapsActivity","com.google.android.maps.LatitudeActivity","com.google" .android.maps.PlacesActivity"等).

我决定使用第二种方法,因为它提供了一个更适合我需要的列表,但我找不到一种方法来过滤掉重复项,只显示应用程序的默认活动,因为它们出现在启动器中(您只能在手机的应用列表中看到一个"地图",而不是四个).我尝试过滤掉系统应用ApplicationInfo.FLAG_SYSTEM,但这会删除我想要的许多应用,包括地图和其他预装的应用.我PackageManager.MATCH_DEFAULT_ONLY在执行queryIntentActivities时尝试使用flag,但这也会过滤掉许多应用程序,只留下一些.

我有点迷失在这里,我不知道该怎么做.我已经阅读了关于检索已安装应用列表的stackoverflow的所有问题,但这个问题从未提出过.请帮助任何人?如何检索没有重复项的已安装可启动应用程序列表?

android android-package-managers android-activity

28
推荐指数
4
解决办法
3万
查看次数

在 Android 11 上调用 getPackageInfo 时出现 NameNotFoundException

设置完成后targetSdkVersion,以30(安卓11)我得到android.content.pm.PackageManager$NameNotFoundException这样做时,packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)在包装上,我知道存在。

堆栈跟踪如下:

android.content.pm.PackageManager$NameNotFoundException: com.google.android.apps.maps
        at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:202)
        at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:174)
Run Code Online (Sandbox Code Playgroud)

android android-permissions android-11

14
推荐指数
2
解决办法
4694
查看次数

Google帐户登录错误(双因素身份验证)

我在Galaxy 10.1标签上使用Google双因素身份验证,并收到我的Google帐户"登录错误"的通知.

Gmail和其他谷歌应用程序似乎是工作,但我去了账户的安全设置不同的计算机上("两步验证"),并撤销平板电脑的应用程序专用密码.然后我创建了一个新的.

新密码适用于平板电脑上的gmail,gtalk和其他Google应用,但我仍会收到登录错误通知.

我认为它可能是平板电脑上的一个应用程序,我已授予访问我的Google帐户的权限,但找不到罪魁祸首.(http://stackoverflow.com/questions/2882253/how-do-i-get-the-logfile-from-an-android-device查看日志文件,与"已连接的站点,应用程序和服务"进行比较)

有人能指出我在平板电脑上的位置,我可能能够找到哪个应用程序有问题?

authentication android two-factor-authentication

6
推荐指数
2
解决办法
8356
查看次数