2013-02-14 1 views
1

Я использую это намерение открыть Chooser, чтобы забрать файл:Правильный способ выбрать файл для открытого

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setDataAndType(Uri.parse(getExternalFilesDir(null).toString()), "*/*"); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
Intent chooser = Intent.createChooser(intent, "Choose File"); 
startActivityForResult(chooser, FILE_SELECT); 

Я не до конца понимает, но это работает. Я скопировал его из какого-то, например, в сети
Результат является Ури, но я считаю обработку Ури, также скопированный из примера, слишком громоздкой

if(uri != null) { 
    if("content".equalsIgnoreCase(uri.getScheme())) { 
     String[] projection = {"_data"}; 
     Cursor cursor = null; 
     try { 
      cursor = context.getContentResolver().query(uri, projection, null, null, null); 
      int column_index = cursor.getColumnIndexOrThrow("_data"); 
      if(cursor.moveToFirst()) { 
       return cursor.getString(column_index); 
      } 
     } 
     catch (Exception e) {} 
    } else if("file".equalsIgnoreCase(uri.getScheme())) { 
     return uri.getPath(); 
    } 
} 

Это самый простой способ, чтобы позволить пользователь выбирает файл и получает его путь?
Почему мне нужно проверить, является ли uri «содержанием»? Я просто хочу открыть текстовый или заархивированный файл, который пользователь выбрал в намерении.
Могу ли я игнорировать проверку содержания, просто предположим «файл» и просто используйте uri.getPath()?

Редактировать I: Есть ли способ принудительно выбирать с помощью схемы uri «файл»?

+0

Очень важно. имел тот же вопрос. И хотя я все еще на тему, я действительно не могу понять, в чем причина «return cursor.getString (column_index);» ??? – user3833732

ответ

1

Да. Это верно. Вы в основном начинаете стремиться получить доступ к родному приложению. который в этом случае является файловой системой. Следующий будет частью onActivityResultData(), который затем будет использовать uri в намерении и получить содержимое файла, который был выбран.

+0

@ Iokoko Я добавил свой комментарий в вопрос. – ilomambo

+0

Это просто вернет схему. Что-то вроде http. Итак, здесь вы проверяете, является ли схема содержанием, которое оно предназначено для файлов. – lokoko

+0

@ Iokoko Я знаю, что делает код, и я знаю, что он работает нормально. Я ищу упростить его. Есть ли у вас предложения? – ilomambo

0

Мне интересно, если Android не пытается оттолкнуть нас от путей к файлам и к Урису. Попробуйте что-нибудь вроде:

InputStream inputStream=contentResolver.openInputStream(uri); 
InputStreamReader file = new InputStreamReader(inputStream); 
int size = file.read(text,0,mMaxLen); 

 Смежные вопросы

  • Нет связанных вопросов^_^