Android Studio上传视频保存到应用的本地存储中
时间: 2023-08-05 17:14:21 浏览: 179
Android Studio 下载视频到本地
在 Android Studio 中,上传视频并保存到应用的本地存储中主要有以下几个步骤:
1. 创建一个用于上传视频的布局界面,包括一个选择视频的按钮和一个用于显示上传进度的进度条。
2. 在 AndroidManifest.xml 文件中添加文件读写权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
```
3. 在 Activity 中处理选择视频的逻辑,可以使用 Intent 调用系统相册或文件管理器来选择视频,并获取视频的 Uri:
```java
private static final int PICK_VIDEO_REQUEST = 1;
private void pickVideo() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("video/*");
startActivityForResult(intent, PICK_VIDEO_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_VIDEO_REQUEST && resultCode == RESULT_OK) {
Uri videoUri = data.getData();
uploadVideo(videoUri);
}
}
```
4. 在 uploadVideo() 方法中,使用 ContentResolver 打开视频文件的输入流,并使用 FileOutputStream 将视频文件写入应用的本地存储中:
```java
private void uploadVideo(Uri videoUri) {
String videoFileName = getVideoFileName(videoUri);
String localFilePath = getLocalFilePath(videoFileName);
try {
InputStream inputStream = getContentResolver().openInputStream(videoUri);
FileOutputStream outputStream = new FileOutputStream(localFilePath);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
// 视频上传成功
} catch (IOException e) {
e.printStackTrace();
// 视频上传失败
}
}
```
5. 在 getVideoFileName() 方法中,获取视频文件的文件名:
```java
private String getVideoFileName(Uri videoUri) {
String fileName = null;
String scheme = videoUri.getScheme();
if (scheme == null || scheme.equals(ContentResolver.SCHEME_FILE)) {
fileName = videoUri.getLastPathSegment();
} else {
Cursor cursor = getContentResolver().query(videoUri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int index = cursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME);
if (index != -1) {
fileName = cursor.getString(index);
}
cursor.close();
}
}
return fileName;
}
```
6. 在 getLocalFilePath() 方法中,获取应用的本地存储路径,并将视频文件保存在该路径下:
```java
private String getLocalFilePath(String fileName) {
String localFilePath = getExternalFilesDir(Environment.DIRECTORY_MOVIES).getPath()
+ File.separator + fileName;
return localFilePath;
}
```
以上就是将视频上传并保存到应用的本地存储中的基本步骤。需要注意的是,写入外部存储的代码需要进行权限检查,而且在 Android 10(API 级别 29)及以上版本中,应用必须使用 MediaStore API 或者 SAF(Storage Access Framework)来访问公共媒体文件,不能直接使用文件路径来访问。
阅读全文