【问题标题】:Is it possible to hide some application in Intent AppChooser?是否可以在 Intent AppChooser 中隐藏某些应用程序?
【发布时间】:2013-10-22 07:45:48
【问题描述】:

我想要的是在我的应用程序中打开 PDF 文件时隐藏 WebBrowser。我只想显示 PDF 阅读器应用程序,如果没有,则显示警报消息。

现在我可以创建 AppChooser 对话框,但我不知道如何隐藏某些应用程序。

非常感谢!

【问题讨论】:

  • 尝试将类型设置为intent.setType("applications/pdf");

标签: android android-intent


【解决方案1】:

您必须在启动选择器之前查询可用的应用程序。而且您需要了解有关要排除的应用程序的一些信息。例如包名

Intent pdfIntent = ...;
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(pdfIntent, 0);

List<Intent> targetPDFIntents = new ArrayList<Intent>();
for (ResolveInfo currentInfo : activities) {
    String packageName = currentInfo.activityInfo.packageName;
if (!"pageToExclude".equals(packageName)) {
        Intent targetPdfIntent = new Intent(android.content.Intent.ACTION_VIEW, exportData);
        targetPdfIntent.setPackage(packageName);
        targetPDFIntents.add(targetPdfIntent);
    }
}

Intent chooserIntent = Intent.createChooser(targetPDFIntents.remove(0), "title");               
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetPDFIntents.toArray(new Parcelable[] {}));
startActivity(chooserIntent);

这样,您就可以启动一个包含包的显式活动列表的选择器。它们都可以处理在第一行创建的 IntentType pdfIntent。

【讨论】:

  • 最后我找到了一种从结果中过滤掉我的应用程序活动的方法。谢谢!
  • 您的回答对我也很有帮助。但是在这个实现中存在一个问题:在选择器对话框的底部,没有“系统”复选框用于将所选应用程序设置为默认值。您知道如何使用已实现的功能和此“默认”复选框创建选择器对话框吗? (例如,没有在 SharedPrefs 等中存储有关先前选择的应用程序的数据)?
  • 我不能 100% 确定,但我不相信,不自行存储它是可能的。因为您从代码中显式地启动选择器,而不是让 android 显示选择器。据我所知,默认设置不可用,应用程序无法设置。但如果有人知道它是如何工作的,我很期待看到它是如何工作的
  • 这个答案有 2 个错误:“targetPdfIntent”应该与 pdfIntent 几乎相同,因此它应该使用 copy-CTOR(几乎,因为它需要针对特定​​活动)。此外,而不是 "targetPdfIntent.setPackage" ,它应该是 "targetPdfIntent.setComponent(new ComponentName(packageName, currentInfo.activityInfo.name));" ,以便它能够处理同一应用程序中的多个活动的情况,这些活动可以处理此意图。否则会显示一个奇怪的“Android系统”项。您可以在 Google-Plus 应用上对其进行测试,例如在分享图片时。
  • 太糟糕了,我没有留下我使用的解决方案的链接。可以在此处找到指向我关于此主题的答案的链接 - How to exclude a specific application from ACTION_VIEW Intent?
【解决方案2】:

我认为您必须尝试使用​​ explicit intent 打开 PDF 阅读器(如 Abode one),捕获异常然后显示您的警报消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    相关资源
    最近更新 更多