Comment puis-je configurer un android intention pour plusieurs types de fichiers (office, pdf, images, texte) et le retour d'un chemin d'accès?
Je suis nouveau sur les intentions et je suis à essayer de comprendre comment utiliser parse(URI) et/ou setType() pour obtenir les bons types de demande d'ouvrir et de me permettre de sélectionner les choses.
Je veux lancer une intention à partir de mon application qui permettra à l'utilisateur de choisir parmi de nombreux types de fichiers (.PDF
, .DOCX
, .XLSX
, .PPTX
, .DOC
, .JPG
, .PNG
, .TXT
, .LOG
, etc.). Ce que j'ai besoin de l'activité de retour est un chemin complet de ce fichier.
Droit maintenant, je suis en utilisant setType("*/*")
avec un sélecteur, que j'ai trouvé ici, mais c'est automatiquement l'ouverture de certains documents sélecteur de en Android. J'ai le gestionnaire de fichiers et d'autres applications, et veulent savoir ce qu'est la norme setType est ou le type MIME. Merci à l'avance.
Aussi, je m'excuse si ce sujet a déjà été répondu. J'ai regardé en ligne, mais je pense que je suis à la recherche de quelque chose de mal parce que les résultats que j'obtiens sont pour les intentions qui veulent juste un de ces ou de ne pas retourner le chemin.
Mon code est ci-dessous: (Note: ce qui est fait à l'intérieur d'un fragment)
static final int PICK_FILE_REQUEST = 101;
private String pathToFile = "";
public String selectFile() {
String path = "";
Intent intent = new Intent(Intent.ACTION_GET_CONTENT), chooser = null;
intent.setType("*/*");
chooser = Intent.createChooser(intent, "Find file to Print");
startActivityForResult(chooser, PICK_FILE_REQUEST);
path = pathToFile;
return path;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PICK_FILE_REQUEST){
if(resultCode == Activity.RESULT_OK){
pathToFile = data.getDataString();
String temp = data.getStringExtra("path");
Log.d("Files Fragment: ", pathToFile);
Log.d("Files Fragment: ", temp);
}
}
}
content://
Uri
dos, vous aurez besoin d'utiliser ContentResolver
et méthodes comme openInputStream()
pour lire le contenu.Je savais qu'il me manquait quelque chose. Je ne savais pas que c'était sur l'accès. Dites-vous que généralement ils reviennent contenu:// Uri comme une norme? Je veux juste que cela fonctionne pour la plupart des navigateurs de fichiers. Je vais droit à une certaine logique pour gérer le contenu de résolution. J'ai repenser mon processus quelque peu. Merci!
"Vous voulez dire que généralement ils reviennent contenu:// Uri comme une norme?" -- cela dépend de la "ils".
ACTION_GET_CONTENT
peut être manipulé par n'importe quoi MediaStore
(qui sera de retour content://
Uri
valeurs) à un gestionnaire de fichiers tiers (qui sera de retour... quelque chose, mais je vais être plus retourner un traditionnel chemin d'accès au fichier). ACTION_OPEN_DOCUMENT
, comme il est suggéré dans la réponse, va toujours de retour d'un content://
Uri
. Et le pourcentage de fois que vous obtenez une content://
Uri
ne fera que croître avec le temps.Je sais, je viens vous demander votre avis pour ce qui est le plus fréquent (ce qui est une mauvaise question pour les apps android!). Si elle ne veut pas venir avec quelque chose que je vous suggère une application gratuite pour le téléchargement. Je vais devoir créer une super méthode pour filtrer ces contenus:// Uri " s !!! Hâte d'y être. Grâce CommonsWare. Je suis toujours curieux de savoir si ces deux actions seront viables pour les formats de fichier que j'ai énumérés dans la question d'origine. Si vous connaissez bien, si pas je peux le trouver via des tests.
ACTION_GET_CONTENT
et ACTION_OPEN_DOCUMENT
sont des choix raisonnables. À l'égard des types MIME, de la des types MIME pour ces formats de fichier (disponible en quelques secondes via votre moteur de recherche préféré). La seule extension de fichier qui vous liste qui n'a pas de sens particulier est .LOG
.OriginalL'auteur napkinsterror | 2014-12-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Intent.ACTION_OPEN_DOCUMENT
,Chaque document est représenté comme un contenu de://URI soutenu par une DocumentsProvider, qui peut être ouvert comme un ruisseau avec openFileDescriptor(Uri, String), ou interrogé pour DocumentsContract.Les métadonnées du Document.
Tous les documents sélectionnés sont retournés à l'application appelante avec permanent de lire et d'écrire l'autorisation des subventions. Si vous souhaitez conserver l'accès aux documents au sein de l'appareil redémarre, vous avez besoin de prendre explicitement la permanent des autorisations à l'aide takePersistableUriPermission(Uri, int).
Les appelants doivent indiquer le document acceptable types MIME à travers setType(Chaîne de caractères). Par exemple, pour sélectionner des photos, utiliser des images/*. Si plusieurs disjoints types MIME sont acceptables, de les définir dans EXTRA_MIME_TYPES et setType(String) pour
*/*
.Pour plus de détails, veuillez vous référer ici.
Merci, c' "EXTRA_MIME_TYPES" est ce que je ne pouvais pas trouver non plus. Je suis aller voir quelques exemples. Je sais que de base les types MIME, mais je voulais juste accepter 1 fichier, mais je ne sais pas quel type de fichier. L'utilisateur peut choisir que. Je pense que c'est la bonne méthode par le peu de documentation, j'ai lu le biais de votre lien. Il le sera également pour un usage unique et ne persiste pas à travers redémarre, mais j'apprécie la connaissance.
Donc, pouvez-vous expliquer comment prendre en charge plusieurs types mime pour les api ci-dessous 19 (API 16 à partir de)
Il n'y a pas de prise en charge de plusieurs types MIME avant de l'API de Niveau 19, IIRC. Dans votre INTERFACE utilisateur, vous devez demander à l'utilisateur quel type MIME pour récupérer, puis l'utiliser avec
ACTION_GET_CONTENT
. Ou, utilisez un caractère générique type MIME, puis de valider la réelle type MIME du contenu que l'utilisateur choisit.OriginalL'auteur bjiang
J'ai eu un problème similaire et passé au moins 15 minutes à la recherche d'un exemple de la façon dont le code de l'appui pour
EXTRA_MIME_TYPES
Heureusement j'ai trouvé un exemple http://android-er.blogspot.co.uk/2015/09/open-multi-files-using.html, essayé, testé, et il semble fonctionner pour mon cas d'utilisation, qui est d'être en mesure de trouver et de charger deux semblables, mais non identiques, mime-types (pour une excentrique raison, le même fichier csv a un type mime si je l'ai copier sur le périphérique via le port USB et l'autre, si je le télécharger à partir de Google Drive). Voici mon extrait de code. Je suppose que vous devez ajouter plus de mime-types dans le tableau de Chaînes de caractères pour répondre à vos besoins.
Son travail juste à l'api android >= 19
OriginalL'auteur JulianHarty
OriginalL'auteur Faakhir
Code suivant fonctionne pour moi, lorsque nécessaire, pour sélectionner plusieurs types MIME
(C'est en C# et Xamarin Android):
Remarque, j'ai essayé
intent.SetType("*.*")
comme décrit dans les autres réponses, mais ce sont soldées par un mauvais comportement.E. g. quand j'mettre en œuvre le code de sélectionner les photos à partir de la galerie, vidéos sélectionnées ainsi:
Donc je viens avec le code ci-dessus: spécifiez les types MIME dans
intent.SetType
, tout le reste viaintent.PutExtra(Intent.ExtraMimeTypes, ...)
OriginalL'auteur sergtk