98 votes

Filtre d'intention Android pour une extension de fichier particulière?

Je veux pouvoir télécharger un fichier avec une extension particulière à partir du réseau et le transmettre à mon application afin de le gérer, mais je n'ai pas été en mesure de comprendre le filtre d'intention. Le type de fichier n'est pas inclus dans les types MIME, et j'ai essayé d'utiliser

 <data android:path="*.ext" />
 

mais je ne pouvais pas faire fonctionner ça.

123voto

Brian Pellin Points 1579

Voici comment je définis mon activité dans mon AndroidManifest.xml pour obtenir que cela fonctionne.

<activity android:name="com.keepassdroid.PasswordActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="file" />
        <data android:mimeType="*/*" />
        <data android:pathPattern=".*\\.kdb" />
        <data android:host="*" />
    </intent-filter>
</activity>

L' scheme de file indique que cela devrait se produire lorsqu'un fichier est ouvert (plutôt que le protocole comme HTTP).

mimeType peut être réglé \*/\* pour correspondre à tout type mime.

pathPattern permet de spécifier ce que l'extension que vous souhaitez faire correspondre (dans cet exemple, .kdb). L' .* au début correspond à une squence de caractères. Ces chaînes exiger le double échappement, alors \\\\. correspond à une interprétation littérale de la période. Ensuite, vous vous retrouvez avec votre extension de fichier. Une mise en garde avec pathPattern est qu' .* n'est pas un gourmand match comme vous pouvez attendre si c'était une expression régulière. Ce modèle ne correspondent pas aux chemins qui contiennent un . avant l' .kdb. Pour une discussion plus détaillée de ce problème et une solution de contournement, voir ici

Enfin, selon l'Android à de la documentation, host et scheme attributs sont nécessaires pour l' pathPattern attribuent à travailler, que pour le générique pour correspondre à quoi que ce soit.

Maintenant, si vous sélectionnez un .kdb fichier dans une application comme Linda Gestionnaire de Fichiers, mon application se présente comme une option. Je tiens à souligner que cela ne vous permettent pas de télécharger ce type de fichier dans un navigateur, car ce n'est qu'enregistre avec le schéma d'un fichier. Avoir une application comme Linda Gestionnaire de Fichiers sur votre téléphone résistants lui-même de manière générique, vous permettant de télécharger tout type de fichier.

9voto

Dawson Points 51

La réponse de Brian ci-dessus m'a permis d'atteindre 90% du chemin. Pour finir, pour le type mime que j'ai utilisé

android:mimeType="*/*"

Je soupçonne que de précédentes affiches ont tenté d’afficher le même détail, mais si l’on ne classe pas l’étoile en barre oblique en tant que code, l’empilement en superposition la considère comme une simple barre oblique.

8voto

CommonsWare Points 402670

Plutôt que android:path , essayez android:mimeType , avec une valeur du type MIME de ce contenu particulier. De plus, android:path n'accepte pas les caractères génériques - utilisez android:pathPattern pour cela.

3voto

Kon Points 16125

La réponse de Brian est très proche, mais voici un moyen propre et sans erreur de faire appel à votre application lorsque vous essayez d'ouvrir un fichier avec votre propre extension personnalisée (aucun schéma ni hôte requis):

 <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:mimeType="*/*" />
    <data android:pathPattern="*.*\\.kdb" />
</intent-filter>
 

3voto

Maciek Sawicki Points 1418

Vous ne pouvez probablement pas le faire à l'échelle du système, parce qu'Android ne prend pas en charge. Vous pouvez faire cela pour des applications spécifiques comme Google client de messagerie ou le navigateur de Google.

Regardez pour plus d'info location: http://www.mail-archive.com/android-developers@googlegroups.com/msg47862.html

J'ai vu le code pour ajouter le support pour les Apk dans le client de messagerie (pour les installer à la place de l'épargne), mais malheureusement je ne peux pas la trouver.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X