IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[Cordova] Ouvrir un fichier dans une application externe


Sujet :

Android

  1. #1
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut [Cordova] Ouvrir un fichier dans une application externe
    Bonjour,

    Je récupère un fichier de tous types que je veux ouvrir dans une application externe proposée par Android sachant que mon appli mobile est basée sur Cordova 3.1.

    Par exemple, j'ai une URL vers un fichier PDF, je veux qu'il me l'ouvre de façon système (soit avec l'appli que l'utilisateur a sélectionné par défaut, soit avec une appli au choix, soit en téléchargeant). Idem avec les types XLS, ZIP, etc.

    De la même façon, je veux pouvoir ouvrir une URL (classique), dans un Browser externe !! Est-ce possible ?

    Note : Je débute en dev mobile.

    Merci !

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    En théorie oui : tu décris le fonctionnement normal d'Android, plus spécifiquement la notion d'Intent.

    Par contre, ne connaissant absolument pas Cordova et ne comprenant pas des masses ce que je trouve dessus... je ne peux t'aiguiller plus.

    EDIT : à priori, ta première requête se ferait via le plugin FileOpener.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ah yes merci.

    En fait, Cordova est une surcouche avec laquelle tu buildes ton application pour qu'elle soit compatible multi-OS. En l'occurence, l'appli doit être compatible Android et iOS. J'avais d'abord trouvé ça cordova-startapp https://github.com/dmedvinsky/cordova-startapp.

    Mais celui que tu m'as proposé m'a l'air plus sérieux (rien que parce qu'il y a un plugin.xml pour faciliter l'installation ).

    Peut être que d'autres personnes ont déjà essayé ces plugins.

    En tout cas merci, je vais tester de ce pas !!

    Note : En fait non, il est marqué compatible iOS et Android mais en vrai, il n'est compatible que Android...

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ca fait des plombes que je n'ai pas fait d'iOS... mais en recherchant un peu sur le net, je n'ai pas l'impression que ce soit possible autrement que pour certains protocoles, ou de manière custom : https://developer.apple.com/library/...07072-CH7-SW18

    Paragraphe "Communicating with other apps".
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    En fait, maintenant j'arrive à peu près à quelque chose mais l'application ne s'ouvre pas. Alors je me demandais s'il fallait déclarer des choses spécifiques dans le AndroidManifest. Par exemple, j'ai rajouté un intent-filter dans ma balise activity (pour l'action VIEW) :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="MonAppli" android:theme="@android:style/Theme.Black.NoTitleBar">
                <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" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>

    ... Mais je ne sais pas si c'est comme ça qu'on s'en sert.
    Je me demande également s'il ne manquerait pas une permission.

  6. #6
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Je dis des bêtises, ce que je viens de citer au dessus, c'est pour accéder à l'application depuis l'extérieur (je viens seulement de le comprendre, faut me pardonner ).

    Ceci étant, voilà ce que j'essaye de faire :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MimeTypeMap mime = MimeTypeMap.getSingleton();
    Uri uri = "http://mon.serveur.com/monfichier.pdf";
    String ext = "";
    int x = uri.toString().lastIndexOf('.');
    if (x > 0) {
        ext = uri.toString().substring(x+1);
    }
    String type = mime.getMimeTypeFromExtension(ext);
    Intent i = new Intent("android.intent.action.ACTION_VIEW", uri);
    i.setType(type);
    ((CordovaActivity)this.cordova.getActivity()).startActivityForResult(i, 1);

    Et j'ai cette exception :
    android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.ACTION_VIEW dat=http://mon.serveur.com/monfichier.pdf typ=application/pdf }
    Est-ce que cela peut venir du fait que je n'ai pas d'application pour ouvrir ce type de fichier ? (Bien qu'il puisse peut être me proposer de le télécharger tout simplement)
    Ou bien une permission manquante ?
    Ou bien parce que c'est une URL en http:// alors qu'il faudrait content:// ou file:// ou autre ? Dans ce cas, comment j'appelle un fichier distant avec une URI correcte ? Faut-il le charger en local avant ? Si oui, comment ?

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non non... il ne trouve pas d'activité associée à la lecture de pdf sur le terminal...
    Ne sachant pas ce que ton application compte faire, le système envoie une exception.

    Essaye avec une image pour tester le comportement Android.

    Ensuite a toi de gérer l'exception pour dire à l'utilisateur: "dis moi, il faudrait que tu télécharge un viewer de pdf" (quitte à lancer à ce moment un intent vers le play-store).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    intent.setDataAndType(Uri.parse(url), "text/html");

    L'action de ton intent devrait être la Constante Intent.ACTION_VIEW, non pas le chemin

    En passant une url avec http, ça devrait permettre d'ouvrir un navigateur et prendre en charge le PDF avec sa visionneuse intégrée.
    Pour ouvrir vraiment avec une application, et pas le navigateur, il faudrait télécharger le fichier en local et lancer l'intent avec "application/pdf" en type... mais il y a risque que le terminal ne possède aucune application pour ouvrir les PDF.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  9. #9
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    intent.setDataAndType(Uri.parse(url), "text/html");

    L'action de ton intent devrait être la Constante Intent.ACTION_VIEW, non pas le chemin

    En passant une url avec http, ça devrait permettre d'ouvrir un navigateur et prendre en charge le PDF avec sa visionneuse intégrée.
    Pour ouvrir vraiment avec une application, et pas le navigateur, il faudrait télécharger le fichier en local et lancer l'intent avec "application/pdf" en type... mais il y a risque que le terminal ne possède aucune application pour ouvrir les PDF.
    Merci, mais comme je l'ai dit plus haut, je ne veux pas ouvrir dans un Viewer interne, il y a des applis très bien pour ça, et potentiellement, je peux avoir à peu près n'importe quel type de fichier.

    Par contre, j'ai l'impression que ça marche jamais, mais je vais essayer sur un terminal physique pour voir le comportement.

  10. #10
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ca fonctionne mieux avec un terminal physique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Ouvrir un fichier dans une application déjà ouverte
    Par FranckM57 dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/10/2014, 11h14
  2. [WD14] Ouvrir un fichier avec une application externe via LanceAppli()
    Par Fastolph dans le forum WinDev
    Réponses: 13
    Dernier message: 28/09/2011, 09h26
  3. Ouvrir et écrire dans une application externe
    Par Rey_del_Pok dans le forum C#
    Réponses: 5
    Dernier message: 01/02/2011, 09h13
  4. drag & drop de fichiers dans une application java
    Par devmat dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 13/12/2007, 00h41
  5. Comment décompresser un fichier dans une application ?
    Par f6dqm1 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 14/01/2005, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo