首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到默认启动的软件包?

如何找到默认启动的软件包?
EN

Stack Overflow用户
提问于 2013-12-28 17:59:25
回答 3查看 1.1K关注 0票数 2

我想找到在Android应用程序管理器中设置了“默认启动”的包。应用程序管理器通常会说“此应用程序默认设置为打开某些操作”,并为这些包设置了“清除默认值”按钮。

例如,此图像显示Adobe的应用程序管理器页面,我已将其设置为打开PDF文件的默认设置。我希望能够以编程的方式确定此包(com.adobe.reader)是否具有“默认启动”集,以及更一般的具有“默认启动”集的所有包。(显然,应用程序管理器可以做到这一点。)

我可以通过以下方式获得所有已安装的软件包:

List packages = getPackageManager() .getInstalledPackages(0);

我如何知道哪些是“默认启动”设置?有什么办法也能找到行动吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-02 22:45:11

这似乎适用于我:

代码语言:javascript
复制
/**
 * Get info on the preferred (launch by default) applications.
 * @return
 */
public String getPreferredAppInfo() {
    List<PackageInfo> packages = getPackageManager()
            .getInstalledPackages(0);
    List<IntentFilter> filters = new ArrayList<IntentFilter>();
    List<ComponentName> activities = new ArrayList<ComponentName>();
    String info = "";
    int nPref = 0, nFilters = 0, nActivities = 0;
    PackageInfo pkg = null;
    for (int i = 0; i < packages.size(); i++) {
        pkg = packages.get(i);
        nPref = getPackageManager().getPreferredActivities(filters,
                activities, pkg.packageName);
        nFilters = filters.size();
        nActivities = activities.size();
        if (nPref > 0 || nFilters > 0 || nActivities > 0) {
            // This is a launch by default package
            info += "\n" + pkg.packageName + "\n";
            for (IntentFilter filter : filters) {
                info += "IntentFilter:\n";
                for (int j = 0; j < filter.countActions(); j++) {
                    info += "    action: " + filter.getAction(j) + "\n";
                }
                for (int j = 0; j < filter.countCategories(); j++) {
                    info += "    category: " + filter.getCategory(j) + "\n";
                }
                for (int j = 0; j < filter.countDataTypes(); j++) {
                    info += "    type: " + filter.getDataType(j) + "\n";
                }
                for (int j = 0; j < filter.countDataAuthorities(); j++) {
                    info += "    data authority: "
                            + filter.getDataAuthority(j) + "\n";
                }
                for (int j = 0; j < filter.countDataPaths(); j++) {
                    info += "    data path: " + filter.getDataPath(j)
                            + "\n";
                }
                for (int j = 0; j < filter.countDataSchemes(); j++) {
                    info += "    data path: " + filter.getDataScheme(j)
                            + "\n";
                }
                // for (ComponentName activity : activities) {
                // info += "activity="
                // + activity.flattenToString() + "\n";
                // }
            }
        }
    }
    return info;
}

PackageManager.getPreferredActivities()的返回值似乎为零,而不是注册的首选活动的总数。如果不是总是零,检查非零就足以判断包是否有“默认启动”集。我还发现PackageManager.getPreferredPackages()总是为我返回零。我还发现,对于过滤器和活动(如Javadoc中提到的)给出的PackageManager.getPreferredActivities() NullPointerException,传递null。

票数 1
EN

Stack Overflow用户

发布于 2013-12-28 18:08:12

PackageManager.getLauncherIntent(字符串packageName)用于包的默认主启动程序活动.

票数 0
EN

Stack Overflow用户

发布于 2013-12-28 18:15:38

检查下面的代码

代码语言:javascript
复制
// intents array list has all the launcher intents
List<PackageInfo> packages = getPackageManager()
          .getInstalledPackages(0);
Intent  intent = null;

for (Iterator iterator = packages.iterator(); iterator.hasNext();) 
{
    PackageInfo packageInfo = (PackageInfo) iterator.next();
    String packageName = packageInfo.packageName;
    // adobe reader example is taken. 
      if(packageName.equals(com.adobe.reader))
      {
        intent =getPackageManager().getLaunchIntentForPackage(packageName));
            break;
      }
}
   if(intent != null)
     {
        startActivty(intent);
     }

或您可以尝试使用此链接获取pdf文件 链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20817606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档