【问题标题】:How to get ActivityInfo from People/Contacts application from PackageManager?如何从 PackageManager 的 People/Contacts 应用程序获取 ActivityInfo?
【发布时间】:2011-08-31 10:50:10
【问题描述】:

我的应用程序的一部分是启动器,用户可以在其中添加(或删除)网格中的应用程序。 我用来获取 ActivityInfo 的代码如下:

Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction(Intent.ACTION_MAIN);
intent.setPackage(packageName);
ResolveInfo rInfo = getPackageManager().resolveActivity(intent, 0);

ActivityInfo aInfo = rInfo.activityInfo;

这允许我提取所有其他活动的活动图标和标签并将它们显示在网格中,但在系统联系人或人员应用程序的情况下,提取的图标是默认系统图标,标签是“安卓系统”。

如何为 People 应用程序提取正确的活动信息?

注意:我提取活动 (resolveActivity()) 而不是应用程序的原因是某些应用程序定义了多个启动器活动,我需要找到所有具有 category=launcher 的活动。

【问题讨论】:

    标签: android package-managers


    【解决方案1】:

    我解决了它在代码中添加缩进行:

    Intent intent = new Intent();
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setAction(Intent.ACTION_MAIN);
    intent.setPackage(packageName);
    -->intent.setComponent(new ComponentName(packageName, className)));
    ResolveInfo rInfo = getPackageManager().resolveActivity(intent, 0);
    
    ActivityInfo aInfo = rInfo.activityInfo;
    

    我从我得到的可启动活动列表中提取了 packageName 和 className,如下所示:

    private List<ActivityInfo> applications = new ArrayList<ActivityInfo>();
    
    for(ApplicationInfo info:getPackageManager().getInstalledApplications(0)){
        Intent intent = new Intent();
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setAction(Intent.ACTION_MAIN);
        intent.setPackage(info.packageName);
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
    
        for(ResolveInfo rInfo:list){                
            ActivityInfo activity = rInfo.activityInfo;
            applications.add(activity);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多