7
votes

Pièce jointe Gmail et extension personnalisée

Je travaille actuellement sur une application Android qui a lu un fichier avec une extension personnalisée. L'une des fonctionnalités obligatoires est que l'application doit être proposée par Gmail lorsque l'utilisateur reçoive un courrier avec la pièce jointe .ourextension.

J'ai fait des recherches et j'ai constaté que Gmail Client sur Android ne s'appuie pas sur l'extension, car dans les données de l'intention lancée, le fichier proposé n'a aucune prolongation. Il s'appuie uniquement sur le type MIME donné par le client de messagerie.

Le problème est que notre fichier personnalisé n'est pas détecté de la même manière entre les clients de messagerie. Par exemple, si je m'envoie avec la page Web Gmail, notre fichier personnalisé, le type MIME est détecté comme application / octet-flux. Si un de mes amis d'envoi avec Apple Mail Desktop Software, il est détecté sous forme de texte / XML (qui serait bien). Et sur un autre client de messagerie, l'évolution, le type MIME est un texte / plain ...

Notre application ne peut pas gérer tous ces types! Sinon, il serait proposé pour chaque type de pièce jointe ...

Y a-t-il une solution pour cela?


0 commentaires

4 Réponses :


0
votes

EDIT: Cette réponse a 3 ans. Je n'avais pas le temps de tester les réponses de l'autre, mais le mien est clairement obsolète, veuillez donc rechercher les autres réponses de ce sujet!

Je n'ai trouvé aucune solution, le seul moyen de travailler est avec le type MIME, vous devez donc prier pour que votre pièce jointe soit reconnue avec un type de mime connu et gérer cela. Cela signifie que vous allez interférer avec une autre application si votre fichier est reconnu comme HTML par exemple.

Vous devez gérer le cas qu'un fichier n'est pas lisible par votre application et affiche une fenêtre contextuelle pour notifier l'utilisateur que vous ne pouvez pas lire le fichier.

Peut-être dans un an ou deux, Gmail fournira une bonne api ...

Au fait, la dernière version Gmail ajoutez un bouton de téléchargement que vous devez gérer pour éviter les accidents, cela fonctionne en créant un nouveau fichier avec l'URI.


0 commentaires

0
votes

Vous pouvez toujours correspondre à une extension pour gmail xxx

rendre la modification du type MIME pour être / et itll ne correspond que sur l'extension


3 commentaires

Désolé, je n'ai pas vu votre réponse avant, je vais essayer ASAP si cela fonctionne et modifierai ma réponse si elle le fait.


Désolé, mais cela ne fonctionne pas, Gmail utilise uniquement le type MIME pour l'intention.


Travaille pour moi. J'ai un bouton de téléchargement et d'aperçu. Testé sur un téléphone de Galaxy S et une tablette Galaxy S II.



2
votes

Il est possible de faire fonctionner cela de Gmail, bien que cela me prenne des jours d'effort pour comprendre toutes les questions.

Les données d'intention importantes xxx

le filtre à l'intention capable de le capturer (quelques notes ci-dessous) xxx

Les systèmes de contenu et de fichiers sont nécessaires. Sans le schéma de contenu Gmail ignorera votre filtre tous ensemble. Cela semble être un bug. Sans le schéma de fichiers Gmail lancera une erreur indiquant qu'il ne sait pas quelle application se lancer dans l'intention. xxx

avec les deux systèmes en place, l'application reçoit l'intention des fichiers téléchargés et prévisualisés. Ils doivent être traités différemment.


3 commentaires

Je viens de tester cela, et cela fonctionne pour Gmail 4.1.2 en cours d'exécution sur Android 4.0.3. Mais quand j'ouvre le même email avec Gmail 2.3.6 en cours d'exécution sur Android 2.3.6, je n'ai même pas la possibilité d'ouvrir la pièce jointe.


Testé avec Gmail 4.2.1 en cours d'exécution sur Android 4.2. Fonctionne bien. Merci.


Lorsque vous testez cela, assurez-vous également d'essayer d'ouvrir une pièce jointe avec une extension différente, qui n'a pas déjà d'association. Vous constaterez que votre «code> filtre d'intention correspond également également. La raison, je pense, est que vous n'avez pas d'attribut hôte et sans que le pathpattern est ignoré (développeur.android.com/guide/topics/manifest /data-element.ht ml). Si vous ajoutez Android: host = "*" alors votre filtre d'intention ne correspondra plus soudainement plus. Le problème semble être que content: // uris ne contient pas le nom de fichier (développeur.android.com/reference/android/content/contenturis .html).



3
votes

solution pour ouvrir le fichier avec une extension personnalisée testée avec Gmail Code pour envoyer un fichier: p>

           <!-- Filter to open file with gmail version < 4.2 -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="application/calc1" />
            <data android:pathPattern=".*\\.calc1" />
            <data android:host="*" />
        </intent-filter>

        <!-- Filter to open with file browser or google drive -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:scheme="file" />
            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\\.calc1" />
            <data android:host="*" />
        </intent-filter>

        <!-- Filter to open file with gmail version 4.2 -->
        <!-- Save file first with "save" button otherwise gmail crashes -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="application/octet-stream" />
            <data android:pathPattern=".*\\.calc1" />
            <data android:host="*" />
        </intent-filter>


0 commentaires