Я пытаюсь получить реальный путь URI.
Сначала я запускаю приложение галереи через намерение:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select picture"), SELECT_IMAGE );
После этого вызывается onActivityResult, где я пытаюсь получить абсолютный путь URI.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (resultCode == RESULT_OK) {
Uri uri;
if (requestCode == SELECT_IMAGE) {
final Uri uri_data = data.getData();
// Get the path from the Uri
final String path = getPathFromURI(uri_data);
if (path != null) {
File f = new File(path);
uri = Uri.fromFile(f);
}
}
}
} catch (Exception e) {
Log.e("FileSelectorActivity", "File select error", e);
}
}
uri_data содержит «content: //com.android.providers.media.documents/document/image%3A67», но в результате путь будет нулевым.
Метод pathFromUri выглядит следующим образом:
private String getPathFromURI(Uri contentUri) {
String res = null;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}
Здесь column_index равно 0, но cursor.getString возвращает ноль.
Почему это происходит?
У меня есть разрешение android.permission.READ_EXTERNAL_STORAGE
EDIT:
Поэтому я хочу сделать снимок через приложение камеры, а затем пользователь выбирает изображение. Таким образом, файл должен храниться на телефоне (так как я проверяю его на телефоне)
EDIT:
Окей, решение было запросить разрешения во время выполнения ... извините, ребята