如何让我的应用程序出现在app chooser中?

时间:2014-07-29 17:36:31

标签: java android pdf android-intent

我想宣传我的应用程序能够查看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和我的app(Rollout PdfEditor)都符合意图。以下是Intent Interceptor的输出:

  

行动:android.intent.action.VIEW

     

DATA:file:///storage/sdcard0/Download/download.pdf   TYPE:application / pdf

     

FLAGS:         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   键:sort_order   值:0

     

2项活动与此目的相符:   Polaris Viewer 4.1(com.infraware.polarisviewer4 - com.infraware.polarisoffice4.OfficeLauncherActivity)   Rollout PdfEditor(com.example.rolloutpdfeditor - com.example.rolloutpdfeditor.MainActivity)&gt;

1 个答案:

答案 0 :(得分:6)

您遗失了<category />所需的IntentFilter个标签!如果你查看<category />的文档,它会说:

  

注意:为了接收隐式意图,您必须包含   意图过滤器中的CATEGORY_DEFAULT类别。方法   startActivity()和startActivityForResult()将所有意图视为一样   他们宣布了CATEGORY_DEFAULT类别。如果你没有声明它   在你的意图过滤器中,没有隐含的意图将解析为你的   活性。

因此,您必须将android.intent.category.DEFAULT作为IntentFilter的类别包含在内。如果您希望应用能够处理来自浏览器或其他应用的pdf链接,则还需要包含android.intent.category.BROWSABLE。您可以找到有关BROWSABLE here的文档。它写着:

  

<强> CATEGORY_BROWSABLE
  目标活动允许自己由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>

我认为你错过了这两个类别。