要解决这个问题,您可以使用MediaStore
API来保存新的视频。以下是一个示例代码,它会在根目录下的Movies
文件夹中创建一个新的视频文件:
import android.content.ContentResolver;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class VideoUtils {
public static final String TAG = "VideoUtils";
public static Uri createVideoUri(ContentResolver contentResolver) {
String fileName = generateFileName();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Video.Media.TITLE, fileName);
contentValues.put(MediaStore.Video.Media.DISPLAY_NAME, fileName);
contentValues.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
contentValues.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
contentValues.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
contentValues.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES);
Uri collection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
contentValues.put(MediaStore.Video.Media.IS_PENDING, 1);
collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
} else {
collection = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
}
Uri item = contentResolver.insert(collection, contentValues);
if (item != null) {
try {
contentResolver.openOutputStream(item).close();
contentValues.clear();
contentValues.put(MediaStore.Video.Media.IS_PENDING, 0);
contentResolver.update(item, contentValues, null, null);
return item;
} catch (IOException e) {
Log.e(TAG, "Failed to create video uri", e);
contentResolver.delete(item, null);
return null;
}
} else {
return null;
}
}
private static String generateFileName() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
return "VIDEO_" + timeStamp + ".mp4";
}
}
在您的代码中,您可以调用createVideoUri()
方法来创建一个新的视频Uri,并将其传递给您的视频录制器。请确保您在AndroidManifest.xml文件中添加了适当的权限和文件提供者配置。
注意:在Android 10及更高版本上,您需要请求WRITE_EXTERNAL_STORAGE
权限,并且您的应用必须在运行时请求MANAGE_EXTERNAL_STORAGE
权限才能访问外部存储。