如何让我的应用出现在应用选择器中?
Posted
技术标签:
【中文标题】如何让我的应用出现在应用选择器中?【英文标题】:How do I make my app appear in app chooser? 【发布时间】:2014-09-21 04:41:06 【问题描述】:我想宣传我的应用能够查看 pdf 文件,以便在从文件管理器中选择 pdf 文件时它会出现在应用选择器中。
这是我的意图过滤器的样子
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/pdf" />
</intent-filter>
</activity>
每当我从文件管理器打开 pdf 时,它会自动选择另一个名为 Polaris Viewer 的 pdf 应用程序。
我检查以确保 Polaris 不是应用程序设置下的默认应用程序。它说没有设置默认值。
另外,我下载了一个名为 Intent Intercept 的第三方应用程序。如果我从文件管理器中选择一个 pdf 文件,则会出现一个显示 Polaris 和 Intent Intercept 的应用程序选择器。如果我选择 Intent Intercept,它会告诉我 Polaris 和我的应用程序(Rollout PdfEditor)都符合意图。这是 Intent Interceptor 的输出:
动作:android.intent.action.VIEW
数据:file:///storage/sdcard0/Download/download.pdf 类型:应用程序/pdf
标志: FLAG_ACTIVITY_FORWARD_RESULT FLAG_ACTIVITY_PREVIOUS_IS_TOP
附加: 额外1: 类:java.lang.Boolean 关键:预览 值:假 额外2: 类:java.lang.String 键:key_filename 值:/storage/sdcard0/Download/download.pdf 额外3: 类:android.net.Uri$HierarchicalUri 键:android.intent.extra.STREAM 额外4: 类:java.lang.Integer 键:排序顺序 值:0
2 项活动符合此意图: Polaris Viewer 4.1 (com.infraware.polarisviewer4 - com.infraware.polarisoffice4.OfficeLauncherActivity) 推出 PdfEditor (com.example.rolloutpdfeditor - com.example.rolloutpdfeditor.MainActivity) >
【问题讨论】:
Polaris Viewer 是否可能只是您对此类Intents
的默认应用程序?转到设置 -> 应用程序 -> Polaris Viewer,然后在“默认启动”下单击“清除默认值”。
正如我在帖子中所说,它说“没有设置默认值”。清除默认按钮不可点击。
那么您是否在另一台设备上测试过它?如果您的Activity
与Intent
匹配,而另一个不是默认值,则应显示选择器对话框。
在另一台设备上尝试过,结果相同。只是这次是 Adobe Reader 而不是 Polaris。 Adobe Reader 再次没有设置默认值。
【参考方案1】:
您的IntentFilter
中缺少必需的<category />
标签!如果您查看<category />
的文档,它会说:
注意:为了接收隐式意图,您必须包含 意图过滤器中的 CATEGORY_DEFAULT 类别。方法 startActivity() 和 startActivityForResult() 将所有意图视为 他们声明了 CATEGORY_DEFAULT 类别。如果你不声明它 在您的意图过滤器中,没有隐式意图将解析为您的 活动。
因此,您始终必须将android.intent.category.DEFAULT
包含为IntentFilter
的类别才能正常工作。如果您希望您的应用程序能够处理来自浏览器或其他应用程序的 pdf 链接,您还需要包含 android.intent.category.BROWSABLE
。您可以找到有关 BROWSABLE
here 的文档。上面写着:
CATEGORY_BROWSABLE 目标 Activity 允许自己由 Web 浏览器启动,以显示链接引用的数据——例如图像或电子邮件消息。
试试这个IntentFilter
:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/pdf" />
</intent-filter>
我认为您缺少这两个类别。
【讨论】:
谢谢,成功了。我没有意识到类别是匹配意图所必需的。生病必须阅读更多。 是的,当您希望这些东西发挥作用时,类别很重要。您可以在here 和here 找到更多信息。我很高兴能帮上忙! 请不要忘记接受这个答案!这向其他人表明这是解决您问题的答案!作为一点奖励,我们都从中获得了声誉! 您如何确定特定意图使用的类别? 这是棘手的部分。大多数情况下,您可以在文档中查找它。或者互联网上的其他地方,但让更模糊的Intents
工作可能非常困难。但是在这种特定情况下,我查看了<category />
here 的文档,它几乎告诉您总是必须包含android.intent.category.DEFAULT
才能使IntentFilter
正常工作。 android.intent.category.BROWSABLE
只是为了让您的应用也可以处理来自浏览器等的链接。以上是关于如何让我的应用出现在应用选择器中?的主要内容,如果未能解决你的问题,请参考以下文章