Je souhaite annoncer que mon application est capable de visualiser des fichiers PDF afin qu'elle apparaisse dans le sélecteur d'applications lorsqu'un fichier pdf est sélectionné à partir du gestionnaire de fichiers.
Voici à quoi ressemblent mes filtres d'intention
<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>
Chaque fois que j'ouvre un fichier PDF à partir du gestionnaire de fichiers, il sélectionne automatiquement une autre application PDF appelée Polaris Viewer.
J'ai vérifié que Polaris n'était pas l'application par défaut, dans les paramètres de l'application. Il dit pas de paramètres par défaut.
En outre, j'ai téléchargé une application tierce appeléeIntention d'interception. Si je sélectionne un fichier pdf à partir du gestionnaire de fichiers, un sélecteur d’application apparaît, affichant Polaris et Intent Intercept. Si je choisis Intent Intercept, cela me dit que Polaris et mon application (Rollout PdfEditor) correspondent à l'intention. Voici la sortie de Intent Interceptor:
ACTION: android.intent.action.VIEW
DATA: fichier: ///storage/sdcard0/Download/download.pdf TYPE: application / pdf
DRAPEAUX: FLAG_ACTIVITY_FORWARD_RESULT FLAG_ACTIVITY_PREVIOUS_IS_TOP
EXTRA: EXTRA 1: Classe: java.lang.Booléen Clé: aperçu Valeur: false EXTRA 2: Classe: java.lang.String Key: key_filename Valeur: /storage/sdcard0/Download/download.pdf EXTRA 3: Classe: android.net.Uri $ HierarchicalUri Clé: android.intent.extra.STREAM EXTRA 4: Classe: java.lang.Integer Clé: sort_order Valeur: 0
2 activités correspondent à cette intention: Polaris Viewer 4.1 (com.infraware.polarisviewer4 - com.infraware.polarisoffice4.OfficeLauncherActivity) Déploiement PdfEditor (com.example.rolloutpdfeditor - com.example.rolloutpdfeditor.MainActivity)>
Réponses:
4 pour la réponse № 1Il vous manque <category />
tags de votre IntentFilter
! si vous regardez la documentation pour <category />
ça dit:
Remarque: Afin de recevoir des intentions implicites, vous devez inclure le Catégorie CATEGORY_DEFAULT dans le filtre d'intention. Les méthodes startActivity () et startActivityForResult () traitent toutes les intentions comme si ils ont déclaré la catégorie CATEGORY_DEFAULT. Si vous ne le déclarez pas dans votre filtre d'intention, aucune intention implicite ne résoudra votre activité.
Donc, vous devez toujours inclure android.intent.category.DEFAULT
comme catégorie pour le IntentFilter
travailler du tout. Si vous souhaitez que votre application puisse gérer les liens PDF à partir d'un navigateur ou d'autres applications, vous devez également inclure android.intent.category.BROWSABLE
. Vous pouvez trouver de la documentation sur BROWSABLE
ici. Ça lit:
CATEGORY_BROWSABLE
L'activité cible se laisse démarrer par un navigateur Web pour afficher les données référencées par un lien, telles qu'une image ou un message électronique.
Essaye ça 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>
Je pense que vous manquez ces deux catégories.