2017-06-30 1 views
0

J'ai un problème avec la réception d'un fichier .txt dans ce cas par whats'app.
J'ai l'intention dans mon activité:
Réception d'un fichier partagé

//check intent 
Intent intent = getIntent(); 
String action = intent.getAction(); 
String type = intent.getType(); 

contrôle si elle est un ACTION_SEND, extrait extra par un Bundle, créez un nouveau File et essayer de le transformer en un String:

if (Intent.ACTION_SEND.equals(action) && Objects.equals (type, "text/plain")) { 
    Log.d ("Intent", "have shared"); 
    Bundle bundle = intent.getExtras(); 
    Uri uri = (Uri) bundle.get(Intent.EXTRA_STREAM); 
    Log.d ("uri ", 
    uri.getAuthority()+" "+ 
    uri.getPath()+" "+ 
    uri.getFragment()+" "+ 
    uri.getUserInfo()); 
    File file = new File (uri.getPath()); 
    Log.d("file" , file.toString()+" "+file.getPath()+" "+file.getName()+" "+ file.exists()+" "+ file.isFile()+" "+file.isDirectory()+" "+file.isAbsolute()+" "+file.isHidden()); 
    try { 
     StringBuilder text = new StringBuilder(); 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 
     //read line by line 
     while ((line = br.readLine()) != null) { 
      text.append(line); 
      text.append('\n'); 
     } 
     Log.d ("String", text.toString()); 
     } catch (java.io.IOException e) { 
       e.printStackTrace(); 
     } 

Les résultats des journaux de débogage sont les suivants:

D/uri: com.whatsapp.provider.media /item/95 null null 
D/file: /item/95 /item/95 95 false false false true false 

Je reçois cette erreur sur BufferedReader:

W/System.err: java.io.FileNotFoundException: /item/95: open failed: ENOENT (No such file or directory) 

et je ne comprends pas pourquoi.
Quelqu'un peut-il m'aider?

Répondre

2

Vous ne recevez pas le chemin d'accès à un fichier. Vous recevez un Uri. Un Uri n'est pas un fichier, et votre Uri a spécifiquement un schéma content, pas un schéma file.

Enlever File file = new File (uri.getPath());. Remplacez new FileReader(file) par new InputStreamReader(getContentResolver().openInputStream(uri)), pour gérer à la fois les schémas content et file.