2012-12-11 6 views
2

Я зарегистрировал свое приложение для приема файлов (любого типа, а не только изображений) из других приложений, следующих за this post.Извлечь имя файла из других приложений

Я реализовал решение, на которое был дан ответ, но я не могу найти способ получить «имя файла» потока данных. В качестве примера из Ури, как:

содержания: // загрузка/all_downloads/5

я могу получить поток из но я ничего об имени исходного файла не знаю генерируя его.

Есть ли способ его получить?

ответ

2

Есть ли способ его получить?

Как правило, нет, потому что не может быть имени, отчасти потому, что не может быть файла. Вы можете получить InputStream на содержание, но это не значит, что есть файл за InputStream.

Для некоторых конкретных провайдеров (например, MediaStore) могут возникнуть определенные хакеры, чтобы попытаться определить имя файла, связанное с некоторыми данными Uri, хотя такие хаки могут быть ненадежными.

4

В большинстве случаев это решит вашу проблему:

Uri intentData = intent.getData(); 
    if (intentData != null) { 
     String filePath; 
     if("content".equals(intent.getScheme())) 
     { 
      filePath = getFilePathFromContentUri(intentData); 
     } 
     else 
     { 
      filePath = intentData.getPath(); 
     } 
} 

private String getFilePathFromContentUri(Uri selectedUri) { 
    String filePath; 
    String[] filePathColumn = {MediaColumns.DATA}; 

    Cursor cursor = getContentResolver().query(selectedUri, filePathColumn, null, null, null); 
    cursor.moveToFirst(); 

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    filePath = cursor.getString(columnIndex); 
    cursor.close(); 
    return filePath; 
} 
0

OnCreate()

Intent intent1 = getIntent(); 
     String action = intent1.getAction(); 
     String type = intent1.getType(); 

     if (Intent.ACTION_SEND.equals(action) && type != null) { 
      this.handleSend(intent1); 
     } 

void handleSend(Intent intent) { 
     try { 
      Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); 
      imageShare.setImageURI(imageUri); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
Смежные вопросы