我的应用背后的概念可能没有意义,但我只是需要它来展示一些东西 我想做的是:
1 - 从android库中导入视频
2 - 重命名(例如xyz)
3 - 将其保存在不同的文件夹(ABC)
完整路径将是,例如:
"/storage/emulated/0/Pictures/ABC/XYZ.mp4"
我设法调用意图显示我将选择目标视频的图库,但我不知道我应该在onActivityResult中写什么?
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Video"),TAKE_Video);
}
}
我在@CommonsWare步骤之后添加了这段代码,但没有任何反应:(
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == TAKE_Video) {
File root = new File(Environment.getExternalStorageDirectory(), "/Pictures/Targets/"); ///storage/emulated/0/Directory Name
if (!root.exists()) {
root.mkdirs();
}
try {
FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(data.getData());
File file;
String newname="newname.mp4";
file = new File(root,newname);
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) > 0) {
fos.write(buf, 0, len);
}
fos.flush();
fos.getFD().sync();
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
答案 0 :(得分:1)
步骤1:在onActivityResult()
中,检查请求代码(第一个参数)以查看它是否为RESULT_LOAD_Video
,并检查结果代码(第二个参数)以查看它是否为{{1} }}
步骤2:当步骤1中的两个检查均为真时,使用新名称在所需目标文件上创建RESULT_OK
。
步骤3:致电FileOutputStream
,传递getContentResolver().openInputStream()
上传递的getData()
的值Intent
(第3个参数)。
步骤#4:使用Java I / O从步骤#3中获得的onActivityResult()
读取字节,并将其写入步骤#2中的InputStream
。
步骤5:完成复制字节后,分别在FileOutputStream
上拨打flush()
,getFD().sync()
和close()
。
步骤#6:当你完成所有这些工作后,将步骤#2-5的代码移到后台线程,因为你不应该在主应用程序线程上进行这种I / O.