2014-01-24 5 views
0

Большинство фрагментов кода, которые я видел здесь и там, чтобы побудить пользователя выбрать файл или изображение, имеют метод onActivityResult, используя функцию, подобную приведенной ниже выбранный путь к файлу.Лучший способ получить имя файла из выбранного файла/изображения

Мой вопрос, почему все это проходит, когда Uri имеет готовую к использованию функцию Uri.getPath()? Есть ли преимущества или недостатки в одном подходе или в другом?

код onActivityResult

Uri source = data.getData(); 
    String fileName=getRealPathFromURI(this, source); 

функция прибудете путь

public static String getRealPathFromURI(Context context, Uri contentUri) { 
      Cursor cursor = null; 
      try { 
      String[] proj = { MediaStore.Images.Media.DATA }; 
      cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
      int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
      } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
      } 
    } 

Я на самом деле было мое приложение врезаться с помощью getRealPathMethod, когда я выбрал файл/изображение из раздаточной ... при использовании Uri.getPath(), у меня не было никаких проблем. Итак ... Какая сделка здесь? Я что-то упускаю?

+0

Вы не должны иметь имя файла, чтобы получить содержимое. И у вас не должно быть такого. http://developer.android.com/guide/topics/providers/document-provider.html#open см. пример openstreamstream/bitmap (эта часть не является исключительной для android 4.4) – zapl

+0

ok ... но это не имеет ничего общего с вопросом. Возможно, то, что я пытаюсь сделать, требует получения имени файла, а не содержимого. – Anonymous

+1

Возможно, нет даже файла. Или тот, к которому вы не можете получить доступ. Вы не можете использовать путь во всех случаях. (и это, по сути, ответ на вопрос: «В чем дело? Я что-то пропустил?») – zapl

ответ

0

Попробуйте, как этот путь

final String [] consDirNames = new String[constDir.length]; 
     // directory names 
     for(int i=0;i<constDir.length;i++){ 

      consDirNames[i]=constDir[i].getName(); 
        File booths[]=  constDir[i].listFiles(new FileFilter() { 
         @Override 
         public boolean accept(File pathname) { 
          // TODO Auto-generated method stub 
          return pathname.getName().endsWith(".pdf"); 
         } 
       }); ; 
     consDirMap.put(consDirNames[i], booths); 
     fileMap.put(consDirNames[i],constDir[i].getAbsolutePath()); 
    } 
Смежные вопросы