在使用mediaRecorder和Camera API录制了一段视频后,我试图将视频保存到用户的多媒体资料中(通过保存到用户的外部电影、DCIM目录或其他)。
不幸的是,我从文档或StackOverflow中找到的代码似乎创建了它们各自的URI,而没有参考录制的视频或保存视频的文件。具体来说,我尝试使用的代码是:
String videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
ContentValues valuesvideos;
valuesvideos = new ContentValues();
valuesvideos.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/" + "Folder");
valuesvideos.put(MediaStore.Video.Media.TITLE, videoFileName);
valuesvideos.put(MediaStore.Video.Media.DISPLAY_NAME, videoFileName);
valuesvideos.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
valuesvideos.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
valuesvideos.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 1);
ContentResolver resolver = context.getContentResolver();
Uri collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
Uri uriSavedVideo = resolver.insert(collection, valuesvideos);
ParcelFileDescriptor pfd;
try {
pfd = context.getContentResolver().openFileDescriptor(uriSavedVideo,"w");
assert pfd != null;
FileOutputStream out = new FileOutputStream(pfd.getFileDescriptor());
// Get the already saved video as fileinputstream from here
File storageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "Folder");
File imageFile = new File(storageDir, "testStorage");
FileInputStream in = new FileInputStream(imageFile);
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
in.close();
pfd.close();
} catch (Exception e) {
e.printStackTrace();
}
它周围的代码和答案似乎暗示着通过访问MediaStore。VOLUME\u EXTERNAL\u PRIMARY分解器可以访问保存的视频文件,但我看不到对它的明确引用。在录制视频之前,我将分配给mediaRecorder的文件定义为:
static File getMediaFile(Context c) {
File mediaStorageDir = c.getExternalFilesDir(null);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
return new File(mediaStorageDir.getPath() + File.separator + "VID_" + timeStamp + ".mp4");
}
停止视频后,我得到了这个错误(参考这行:uriSavedVideo=resolver.insert(collection,valuesvideos)
):
java.lang.不支持的操作异常:未知的URI:内容://媒体/external_primary/视频/媒体在android.database.数据库Utils.read例外来自包裹(数据库Utils.java.167)...
如何正确创建URI并参考保存的视频?从文件URI替换URI。fromFile(f)
代替uriSavedVideo也不起作用。
要将特定的视频文件保存到图库,我将该文件作为参数传递给new FileInputStream
。
其次,正如Android文档所述:
只有应用可以查看文件,直到应用将IS_PENDING的值更改回0。
因此,根据user@Blackapps的建议,我手动更改了该状态。更改的代码如下:
private static void addToApi29Gallery(File file, Context context) {
String videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
ContentValues valuesvideos = new ContentValues();
valuesvideos.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/" + "Trickshott");
valuesvideos.put(MediaStore.Video.Media.TITLE, videoFileName);
valuesvideos.put(MediaStore.Video.Media.DISPLAY_NAME, videoFileName);
valuesvideos.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
valuesvideos.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
valuesvideos.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 1);
ContentResolver resolver = context.getContentResolver();
Uri collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); //all video files on primary external storage
Uri uriSavedVideo = resolver.insert(collection, valuesvideos);
ParcelFileDescriptor pfd;
try {
pfd = context.getContentResolver().openFileDescriptor(uriSavedVideo,"w");
assert pfd != null;
FileOutputStream out = new FileOutputStream(pfd.getFileDescriptor());
// Get the already saved video as fileinputstream from here.
FileInputStream in = new FileInputStream(file);
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
in.close();
pfd.close();
valuesvideos.clear();
valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 0); // Only your app can see the files until pending is turned into 0.
context.getContentResolver().update(uriSavedVideo, valuesvideos, null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
我正在通过共享按钮将视频上传到youtube。如果我点击上传按钮,它会显示社交图标,比如whatsapp、facebook、youtube。当我点击youtube时,它应该被上传到youtube。 下面是我的代码: 选择视频后,我可以选择youtube图标。然后,您的Tube窗口会自动关闭。任何建议都是非常可观的。谢谢!
我将html写成 现在我希望如果选项是1,那么它应该被选择为 请帮帮我!!!
我正在尝试做一个小应用程序,只显示图片从一个特定的文件夹在一个图库视图。我找到了几个例子,但每一个都只能显示一个图像。我将在下面发布的这个例子是一个很好的帮助,它做几乎完全是我想要它做的,我只需要改变它显示图像从特定的文件夹,而不是所有的文件夹。我花了几天的时间来尝试,但我似乎没有添加正确的代码。我觉得这是一件很简单的事情,我也错过了。如有任何帮助,我们将不胜感激!
我想显示“users”表中两个指定列“first_name”和“pic”的所有值。我正在尝试“Pulk”,但它在echo时显示为json格式。但我需要展示给大家看,一些东西——‘John pic’。求求你,有人帮帮我。这是我在“索引”中的示例代码。刀身php的吼声-
问题内容: 控制器: 视图: Javascript: 但是,我得到一个错误 我试图从ajax发布数据和文件,但是它不起作用。我的问题是如何解决该错误?为什么控制器无法读取用户文件的内容? 谢谢 问题答案: 尝试将您的输入内容放入表单并提供id =’your_form_id表单,然后以这种方式在javascript中发送数据: 然后替换这行 有了这个 也设置以下:
如何在两条准则(即两个单词)之间选择文本? 示例: Lorem ipsum dolor sit amet,concetetur adipiscing elit。连续威尼斯整数。Suspendisse在pretium elit,id euismod odio。Quisque sem lorem、laoreet et feugiat eget、elementum eu felis。努克·奎斯·尼西·泰