Comment obtenir le chemin d'accès au fichier à partir d'un URI qui pointe vers un document PDF?
Maintenant mon code s'ouvre par défaut des téléchargements de vue et il ne me montre le Pdf que j'ai téléchargé. - Je choisir un fichier PDF et j'obtiens ceci:
content://com.android.les prestataires.les téléchargements.documents/document/1171
Je veux obtenir ceci:
/storage/emulated/0/Download/ch22Databases.pdf
Ma question est comment puis-je le faire dans Android?
Mon code:
public void PDF() {
PDF = (Button) findViewById(R.id.FindPDFBtn);//Finds the button in design and put it into a button variable.
PDF.setOnClickListener(//Listens for a button click.
new View.OnClickListener() {//Creates a new click listener.
@Override
public void onClick(View v) {//does what ever code is in here when the button is clicked
Intent intent = new Intent();
intent.setType("application/pdf");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select a PDF "), SELECT_PDF);
}
}
);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//PDF
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PDF) {
Uri selectedUri_PDF = data.getData();
SelectedPDF = getPDFPath(selectedUri_PDF);
}
}
}
public String getPDFPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Vous avez certainement ne pouvez pas utiliser MediaStore.Images pour trouver un PDF. Je serais choqué si Android indexées un fichier PDF en tant qu'image. Lorsque vous obtenez un contenu URI que vous ne sont généralement pas exposés à la voie (pour des raisons de sécurité). Au lieu de cela, vous êtes attendus pour utiliser un ContentResolver à ouvrir un flux pour le contenu du fichier et de le lire. Accès Direct aux fichiers est de plus en plus difficile sur Android (pour des raisons de sécurité).
Votre problème a été résolu? S'il vous plaît marquer la question comme résolue si vous trouvez mon aide précieuse 😉
oui je sais qu'ils ont beaucoup changé et maintenant c'est difficile d'obtenir le chemin, je pourrais créer mon propre gestionnaire de fichiers dans mon app @DougStevenson
Dans mon HTC 816 Désir de téléphone [Note: cet appareil est mis à niveau à la Guimauve, mais a encore des plantages de KitKat. En tant que développeur, j'ai expérimenté que la Caméra ouvert par l'intention d'obtenir l'image capturée par elle, ne dévoile jamais ses ressources. Cela me donne de l'interne crash, quand j'essaie de prendre la deuxième photo.], le retour de chemin d'accès commence par "/document/primaire:", et il est conservé dans 'pdfUri.getPath()' résultat dans un fichier non trouvé exception. Aussi quand je fais une recherche dans " MediaStore.Les Images.Médias.Des DONNÉES, index de colonne retournée est -1.
Votre problème a été résolu? S'il vous plaît marquer la question comme résolue si vous trouvez mon aide précieuse 😉
oui je sais qu'ils ont beaucoup changé et maintenant c'est difficile d'obtenir le chemin, je pourrais créer mon propre gestionnaire de fichiers dans mon app @DougStevenson
Dans mon HTC 816 Désir de téléphone [Note: cet appareil est mis à niveau à la Guimauve, mais a encore des plantages de KitKat. En tant que développeur, j'ai expérimenté que la Caméra ouvert par l'intention d'obtenir l'image capturée par elle, ne dévoile jamais ses ressources. Cela me donne de l'interne crash, quand j'essaie de prendre la deuxième photo.], le retour de chemin d'accès commence par "/document/primaire:", et il est conservé dans 'pdfUri.getPath()' résultat dans un fichier non trouvé exception. Aussi quand je fais une recherche dans " MediaStore.Les Images.Médias.Des DONNÉES, index de colonne retournée est -1.
OriginalL'auteur Lazar Kukolj | 2016-03-20
Vous devez vous connecter pour publier un commentaire.
Ajouter cet extrait de code ci-dessous dans votre
getPDFPath
méthode:Dans votre cas, ce code est spécifiquement pour les documents de
DownloadProvider
, pour plus de contrôle de mise en œuvre Paul Burke répondre. Personnellement, j'utilise son aFileChooser bibliothèque pour éviter ce genre de problèmes.si j'utilise cette méthode, j'obtiens /document/1384
Donc, avec les données.getData().getPath() vous obtenez de /storage/emulated/0/Download/ch22Databases.pdf?
J'ai édité ma réponse. Veuillez me dire si vous avez toute autre question.
ok, donc, c'est de travailler pour mes téléchargements, merci!, mais qu'est-ce que ses dans un autre dossier? quand j'ai ouvert l'intention y est une diapositive dans le menu de gauche où je vois d'autres répertoires? merci encore!!
OriginalL'auteur Gueorgui Obregon
Vous n'avez pas.
ACTION_GET_CONTENT
a peu à faire avec les fichiers.Si vous avez absolument besoin d'un fichier, l'utilisation d'un sélecteur de fichiers de la bibliothèque, pas
ACTION_GET_CONTENT
.Si vous souhaitez utiliser
ACTION_GET_CONTENT
, arrêter d'essayer d'obtenir un chemin du système de fichiers, le contenu. UtilisationContentResolver
etopenInputStream()
pour lire le contenu du contenu, si leUri
a unfile
,content
, ouandroid.resource
régime. Utiliser un client HTTP API si leUri
a unhttp
ouhttps
régime.OriginalL'auteur CommonsWare
Ci-dessous sont les deux solutions
1) Vous pouvez utiliser le code ci-dessous. Il peut gérer n'importe quel type de fichier et de dossier.
C'est la meilleure solution que j'ai dû parcourir les fichiers.
Espère que ça vous aidera.
Une Autre Façon
2) une Autre solution que j'ai trouvé est
Ajouter dépendance
build.gradle
de Module: appPuis dans votre code à utiliser
Assurez-vous que vous avez ajouté en dessous de l'autorisation
Manifest.xml
OriginalL'auteur ELITE
Uri Uri = intention.getData();
OriginalL'auteur bijal
De ces deux lignes a fonctionné pour moi
OriginalL'auteur bijal