Подскажите как получить реальный путь файла из uri для API 16 - 26 или посоветуйте библиотеку какую нибудь.
Задача такая, выбрать изображение с помощью галереи для последующей загрузки на сервер. И вообще какой должен быть путь к файлу для того чтобы создать объект файла File. Сейчас у меня получается получить такой путь к файлу: /storage/emulated/0/DCIM/Camera/20171115_140423.jpg это верный путь или нет?
Мой код:
public void images(MenuItem item) {
if (Build.VERSION.SDK_INT <= 19) {
Intent i = new Intent();
i.setType("image/*");
i.setAction(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(i, 10);
} else if (Build.VERSION.SDK_INT > 19) {
if(Build.VERSION.SDK_INT > 22) checkPermissions();
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 10);
}
}
private void checkPermissions() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED||
ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
},
1052);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
Uri selectedImageUri = data.getData();
String selectedImagePath = getRealPathFromURI(selectedImageUri);
//Получаю путь = /storage/emulated/0/DCIM/Camera/20171115_140423.jpg
}
}
public String getRealPathFromURI(Uri uri) {
if (uri == null) return null;
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = ctx.getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String result = cursor.getString(column_index);
cursor.close();
return result;
}
return uri.getPath();
}