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.

OriginalL'auteur Lazar Kukolj | 2016-03-20