如何从牛轧糖上传选定的视频,路径返回空
How to upload selected video from nougat, path returning null
我想从图库上传视频 selecting。
我正在使用 Intent select 来自设备的视频:
Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_VIDEO_REQUEST);
之后:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_TAKE_GALLERY_VIDEO) {
Uri filePath = data.getData();
try {
String[] projection = {MediaStore.Video.Media.DATA};
Cursor cursor = getContentResolver().query(filePath, projection, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
String videoPath = cursor.getString(columnIndex);
} catch (Exception e) {
Log.e("error", e.getMessage());
}
}
}
}
但是当我在 onActivityResult() 中获取路径时,它返回 null。
我开始知道牛轧糖有变化,但找不到任何解决方案。
我的代码适用于 android 所有版本,牛轧糖除外。
请大家帮忙。
"Android-Multipicker-Library" 允许您在 android 中选择任何类型的路径,特别是 "Nougat"
My code is working in all versions of android except nougat.
不是真的。它可能适用于一些设备上的几个场景。
您的代码假定您返回的 Uri
:
- 有
content
方案
- 来自供应商,当在
Uri
上查询时,该供应商将为 MediaStore.Video.Media.DATA
return 提供一些值
- 是指向外部存储的路径,因此您可以使用
None 必然为真:
- 在旧设备上,您更有可能通过
file
方案获得 Uri
- 任何应用程序都可以为
video/*
实施 ACTION_GET_CONTENT
,并且他们可以为 Uri
交回他们想要的任何东西
MediaStore
以外的提供者不必兑现 MediaStore.Video.Media.DATA
MediaStore
索引可移动存储上的媒体,其路径对您无用,因为您无法读取 Android 4.4+ 上可移动存储上的任意位置
要使用 content
Uri
,请在 ContentResolver
上调用 openInputStream()
,以获得内容上的 InputStream
。直接使用 InputStream
,或者使用它来将内容复制到您控制的文件中的某些 FileOutputStream
。
我想从图库上传视频 selecting。
我正在使用 Intent select 来自设备的视频:
Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_VIDEO_REQUEST);
之后:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_TAKE_GALLERY_VIDEO) {
Uri filePath = data.getData();
try {
String[] projection = {MediaStore.Video.Media.DATA};
Cursor cursor = getContentResolver().query(filePath, projection, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
String videoPath = cursor.getString(columnIndex);
} catch (Exception e) {
Log.e("error", e.getMessage());
}
}
}
}
但是当我在 onActivityResult() 中获取路径时,它返回 null。 我开始知道牛轧糖有变化,但找不到任何解决方案。
我的代码适用于 android 所有版本,牛轧糖除外。
请大家帮忙。
"Android-Multipicker-Library" 允许您在 android 中选择任何类型的路径,特别是 "Nougat"
My code is working in all versions of android except nougat.
不是真的。它可能适用于一些设备上的几个场景。
您的代码假定您返回的 Uri
:
- 有
content
方案 - 来自供应商,当在
Uri
上查询时,该供应商将为 - 是指向外部存储的路径,因此您可以使用
MediaStore.Video.Media.DATA
return 提供一些值
None 必然为真:
- 在旧设备上,您更有可能通过
file
方案获得Uri
- 任何应用程序都可以为
video/*
实施ACTION_GET_CONTENT
,并且他们可以为Uri
交回他们想要的任何东西
MediaStore
以外的提供者不必兑现MediaStore.Video.Media.DATA
MediaStore
索引可移动存储上的媒体,其路径对您无用,因为您无法读取 Android 4.4+ 上可移动存储上的任意位置
要使用 content
Uri
,请在 ContentResolver
上调用 openInputStream()
,以获得内容上的 InputStream
。直接使用 InputStream
,或者使用它来将内容复制到您控制的文件中的某些 FileOutputStream
。