Android: выбор файла

286
05 августа 2017, 03:09

Нужно реализовать такую фишку: приложение просит выбрать в файлах изображение,с помощью установленных программ (например "Мои файлы"),чтобы потом из файла вытащить его полный путь. Такое я видел...Ну в будильнике, приложении ВК и т.д.

Как это реализовать?

Сначала я хотел просто получить список файлов в ListView с помощью класса File,но понял,что это будет не удобно для пользователя. Должна быть альтернатива как в других программах.

Answer 1

Допустим вы хотите получить картинку из галереи.

Тогда пишем следующее:

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);

Это запустит галерею. При выборе фото сработает метод onActivityResult(), поэтому переопределяем его:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode)
    {
         case 1:
         {
             if (resultCode == RESULT_OK)
             {
                 Uri chosenImageUri = data.getData();
             }
             break;
         }
    }
}

В объекте chosenImageUri есть путь к объекту галереи, выглядит вот так примерно: media/xcvbcxvb/sdfadf/xvb/12332

Чтобы из этого бреда получить путь к СД карте пишем:

final Cursor cursor = getContentResolver().query( chosenImageUri, null, null, null, null );
cursor.moveToFirst();
final String filePath = cursor.getString(0);
cursor.close();

Вуаля, в объекте filePath лежит нужный нам полный путь к файлу

Answer 2

получить ссылку можно так

chosenImageUri.getEncodedPath()
Answer 3
Cursor cursor = context.getContentResolver().query(selectedImage, new String[] {
  android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
  cursor.moveToFirst();
  final String imageFilePath = cursor.getString(0); // Link to the image
READ ALSO
Вылетает приложение при использовании setMyLocation

Вылетает приложение при использовании setMyLocation

Если использовать setMyLocationEnabled(true) и дать приложению разрешение на использование местоположения, то приложение просто вылетает при запуске

212
Как решить CommandAcceptanceException в интеграционном тесте?

Как решить CommandAcceptanceException в интеграционном тесте?

Есть DAO метод который я тестирую при помощи hsqldb

342
Консольный морской бой на java

Консольный морской бой на java

Здравствуйте, пишу примитивную версию морского боя на javaЗнаю, тема такая была, но из рассмотренных мною вариантов логику работы так и не понял,...

1027
ViewPager+PhotoView

ViewPager+PhotoView

Может быть, кто-нибудь может поделиться готовым классом, в котором совместно работают ViewPager и PhotoView? Ps

286