2017-10-09 5 views
0

Je suis en train de télécharger des fichiers sur le serveur de mon application. L'utilisateur est autorisé à attacher le fichier à partir de son stockage interne. Mais certains comment le chemin que je reçois d'un téléphone Nougat est différent de la norme /storage/emulated/0/.... dans quelques téléphones je reçois external_files/... et dans d'autres je reçois root_files/storage/999/..... Dans ce cas, je ne reçois pas le bon chemin du fichier. Comment gérons-nous ce scénario?Joindre des fichiers et de télécharger sur le serveur - Android Nougat

Mon code:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     Uri selectedImageUri = data.getData(); 
     String filePath = data.getData().getPath(); 
     File sourceFile = new File(fileFields.get(i).getFileName()); 
     FileInputStream fileInputStream = new FileInputStream(sourceFile); 
    } 
} 

Répondre

0

A Uri est pas un fichier. getPath() n'a aucun sens à moins que le schéma du Uri ne soit file. Ce ne sera pas très commun sur les appareils Android plus récents. Au lieu de cela, le schéma sera content, et getPath() vous sera inutile.

Au lieu de cela, pour les deux file et contentUri valeurs, utilisez un ContentResolver et openInputStream() pour obtenir un InputStream sur le contenu identifié par le Uri. Cette approche fonctionne jusqu'à Android 1.0.

+0

Pouvez-vous s'il vous plaît me donner un exemple? J'ai essayé d'utiliser 'ContentResolver' mais j'ai obtenu' NPE' sur 'cursor.moveToFirst()' –

+0

@SahanaPrabhakar: Ma réponse n'implique pas 'Cursor'. J'ai dit d'appeler 'openInputStream()'. 'openInputStream()' ne retourne pas de 'Cursor'. 'openInputStream()' renvoie un 'InputStream'. Ainsi, 'getContentResolver(). OpenInputStream (selectedImageUri)' vous donne un 'InputStream' sur le contenu identifié par' Uri'. – CommonsWare