Ответ 1
Что вы получаете от этого фрагмента кода:
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.TITLE, "Title1");
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
values.put(MediaStore.Video.Media.DATA, videoPath);
Uri uri = cr.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
является общедоступным Uri
. Подробнее об этом можно узнать здесь, где вы можете видеть, что поскольку API 19 (KitKat) изменился доступ к Media
.
Изучив исходный код Android, вы можете увидеть схему и столбцы видеоданных базы данных. VideoColumns
простирается от MediaColumns
, который имеет колонка:
MediaStore.MediaColumns.DATA
описывается как:
Итак, вы должны получить реальный Uri
из общедоступного Uri
.
Для этого выполните код:
getDataColumn(context, uri, null, null);
где Uri
является вашим общедоступным Uri
, а функция getDataColumn
выглядит так:
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = MediaStore.MediaColumns.DATA;
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
Этот код исходит из aFileChooser, а функция getPath