package com.example.videodemo;
import java.io.File;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button record = null;
private String filename = "demo";
private File fileparent = null;
private File filepath = null;
private Uri uri = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
record = (Button) super.findViewById(R.id.record);
record.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String state = Environment.MEDIA_MOUNTED;
// 判断SD卡是否存在
if (Environment.getExternalStorageState().equals(state)) {
// 如果存在,获取一级目录并设定好文件保存目录
fileparent = new File(Environment
.getExternalStorageDirectory()
+ File.separator
+ "video" + File.separator);
if (!fileparent.exists()){
fileparent.mkdirs();
}
filepath = new File(fileparent.toString() + "video" + File.separator + filename + ".3gp");
uri = Uri.fromFile(filepath);
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, filepath);
startActivityForResult(intent, 1);
} else {
record.setText("shagua");
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
}
}
确定下访问权限都开了吗?
android.permission.WRITE_EXTERNAL_STORAGE
只添加了这么一个权限,和之前没有添加的时候也是一样的。还是只能保存到默认的路径上
解决方案:
fileparent = new File(Environment
.getExternalStorageDirectory()
+ File.separator
+ "video");
if (!fileparent.exists()){
fileparent.mkdirs();
}
File file=new File(parentFile, filename + ".3gp");
uri = Uri.fromFile(filepath);
不能保存的原因分析:
你所写的代码进行的操作是:
1.定义一个父文件夹,不存在则创建:sd卡路径/video
2.在此文件夹下,继续定义新文件夹(sd卡路径/video/video/filename.3pg),没有创建文件夹(sd卡路径/video/video/),所以存不上文件
总结:Uri.fromFile方法只能在已经存在的文件夹下创建文件,如果文件所在文件夹不存在,则不能储存。