Jua*_*ana 18 video android mediastore android-contentresolver
我正在尝试插入视频MediaStore,就像使用此方法存储图像一样:
MediaStore.Images.Media.insertImage(getContentResolver(), imagePath, null, null)
Run Code Online (Sandbox Code Playgroud)
由于没有类似的方法MediaStore.Video.Media,我尝试做的是插入一条记录MediaStore.Video.Media.EXTERNAL_CONTENT_URI,然后将文件复制到目的地,如下所示:
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);
try {
OutputStream os = cr.openOutputStream(uri);
...
...
} (FileNotFoundException e) {
cr.delete(uri, null, null);
}
Run Code Online (Sandbox Code Playgroud)
在uri返回的non-null的形式content://media/external/video/media/{id},这似乎是正确的.
但是当cr.openOutputStream(uri);被激活时,会FileNotFoundException被抛出.
最后一点类似于Image.Media.insertImage查看其源代码所做的操作.
顺便说一句,我确实得到了WRITE_EXTERNAL_STORAGE许可.另外,我正在测试4.3和4.4.
你从这段代码中得到了什么:
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);
Run Code Online (Sandbox Code Playgroud)
是公的Uri。可以在此处找到更多信息,您可以在其中看到,自 API 19 (KitKat) 以来,对 的访问Media已发生变化。
通过查看 Android 的源代码,您可以看到数据库视频架构和列。VideoColumns扩展自MediaColumns,其中包含以下列:
MediaStore.MediaColumns.DATA
Run Code Online (Sandbox Code Playgroud)
被形容为:
所以你必须Uri从公众那里得到真实的Uri。
为此,请运行以下代码:
getDataColumn(context, uri, null, null);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
这段代码来自aFileChooser和函数getPath
| 归档时间: |
|
| 查看次数: |
2100 次 |
| 最近记录: |