2017-02-21 44 views
0
public void fileSearching(){ 
    try{ 
     // find1, find2 are buttons that open the file explorer 
     find1.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       Intent i = new Intent(); 
       i.setAction(Intent.ACTION_GET_CONTENT); 
       i.setType("file/*"); 
       check = 0; 
       startActivityForResult(i, CODE); 
      } 
     }); 
     find2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(); 
       i.setAction(Intent.ACTION_GET_CONTENT); 
       i.setType("file/*"); 
       check = 1; 
       startActivityForResult(i, CODE); 
      } 
     }); 
    } 
    catch (Exception ex){} 
} 
@Override 
public void onActivityResult(int request, int result, Intent data){ 
    if (request == CODE && result == RESULT_OK){ 
     Uri u = data.getData(); 
     String path = data.getData().getPath(); 
    } 
} 

Retrurns /внешний/файл/59, но мне нужно /SDCARD/загрузки/... + имя файла
мне это нужно, потому что я хочу получить sha-1, md5, ... hash для любого файла.
Если я использую «/ external/file/xx», он дает мне FileNotFoundException.
Я пробовал некоторые решения, которые уже были представлены, но никто, казалось, не работать для меня или я не знаю, как использовать егоAndroid получить реальный путь и имя файла из Ури

ответ

0

Retrurns/внешний/файл/59

То есть потому что вы не смотрели на схему Uri. getPath()только имеет смысл, если схема file. Вы редко получите Uri с схемой file. Обычно он будет иметь схему content, и в этом случае путь для вас не имеет смысла.

Мне нужно это, потому что я хочу получить sha-1, md5, ... hash для любого файла.

Использование ContentResolver и openInputStream() получить InputStream на содержание идентифицированного Uri. Пройдите, что InputStream до your hashing algorithm.