假设我只想分配1GB的空间来将我的视频存储在特定的文件目录中,一旦它达到/达到1GB,它将如何自动删除该目录中最旧的视频文件?
对不起我是java / android的kinna新手,目前正在创建一个汽车黑盒子应用程序可以有人帮助我...谢谢
这是我到目前为止尝试过的,有人可以告诉我如何在CameraTest Activity中实现上述功能:
public class CameraTest extends Activity implements SurfaceHolder.Callback, OnClickListener {
public static SurfaceView surfaceView;
public static SurfaceHolder surfaceHolder;
public static Camera MainCamera;
private static boolean previewRunning;
private static boolean serviceRunning = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
surfaceView = (SurfaceView)findViewById(R.id.surface_camera);
surfaceView.setOnClickListener(this);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Button btnSetting = (Button) findViewById(R.id.button2);
btnSetting.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
startActivity(new Intent(getApplicationContext(), SettingActivity.class));
}
});
}
@Override
public void onClick(View v) {
if (serviceRunning)
{
serviceRunning = false;
startService(new Intent(getApplicationContext(), ServiceRecording.class));
}
else
{
serviceRunning = true;
stopService(new Intent(getApplicationContext(), ServiceRecording.class));
}
}
public static boolean ServiceStatus;
public static String resParams;
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(ServiceRecording.recordingStatus)
{
stopService(new Intent(getApplicationContext(), ServiceRecording.class));
try {
Thread.sleep(4000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
MainCamera = ServiceRecording.ServiceCamera;
startService(new Intent(getApplicationContext(), ServiceRecording.class));
}
else{
MainCamera = Camera.open();
if (MainCamera != null) {
resParams = MainCamera.getParameters().get("preview-size-values");
Camera.Parameters params = MainCamera.getParameters();
params.setPreviewSize(320, 240);
params.setPreviewFormat(PixelFormat.JPEG);
MainCamera.setParameters(params);
try {
MainCamera.setPreviewDisplay(holder);
}
catch (IOException e)
{
e.printStackTrace();
}
MainCamera.startPreview();
previewRunning = true;
}
else {
Toast.makeText(getApplicationContext(), "Camera not available!", Toast.LENGTH_LONG).show();
finish();
}
}
if (previewRunning) {
MainCamera.stopPreview();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){
MainCamera.stopPreview();
previewRunning = false;
MainCamera.release();
}
}
我的serviceRecording.java文件 公共类ServiceRecording扩展服务{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
public static Camera ServiceCamera;
public static boolean recordingStatus;
@Override
public void onCreate() {
super.onCreate();
recordingStatus = false;
ServiceCamera = CameraTest.MainCamera;
surfaceView = CameraTest.surfaceView;
surfaceHolder = CameraTest.surfaceHolder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (recordingStatus == false)
{
//new Timer().scheduleAtFixedRate(task, after, interval);
startRecording();
}
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
stopRecording();
//camera.stopPreview();
recordingStatus = false;
//camera.release();
}
private MediaRecorder mediaRecorder;
private static int encodingType;
private static String videoResolution;
private static String fileFormat;
private static boolean audioStatus;
private static int timeInterval;
private static final String TAG = "Exception";
public boolean startRecording(){
try {
if(Tab1Activity.encodingPref == null)
{
encodingType = 1;
}
else
{
encodingType = Integer.parseInt(Tab1Activity.encodingPref);
}
//******************************************************************
if(Tab1Activity.videoResPref == null)
{
String stringRes = CameraTest.resParams;
String[] entriesValues = stringRes.split(",");
videoResolution = entriesValues[0];
}
else
{
videoResolution = Tab1Activity.videoResPref;
}
//******************************************************************
if(Tab1Activity.fileFormatPref == null)
{
fileFormat = ".mp4";
}
else
{
fileFormat = Tab1Activity.fileFormatPref;
}
//******************************************************************
if(Tab2Activity.audioPref == false)
{
audioStatus = false;
//PreferenceManager.setDefaultValues(this, R.xml.tab2, true);
}
else
{
audioStatus = Tab2Activity.audioPref;
}
//******************************************************************
Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show();
try{
ServiceCamera.reconnect();
ServiceCamera.unlock();
}
catch(Exception e){
}
mediaRecorder = new MediaRecorder();
mediaRecorder.setCamera(ServiceCamera);
if(audioStatus != true)
{
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
}
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
if(audioStatus != true)
{
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
}
mediaRecorder.setVideoEncoder(encodingType);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss");
Date date = new Date();
File dirlist = new File(Environment.getExternalStorageDirectory() + "/VideoList");
if(!(dirlist.exists()))
dirlist.mkdir();
File TempFile = new File(Environment.getExternalStorageDirectory() + "/VideoList", dateFormat.format(date) + fileFormat);
mediaRecorder.setOutputFile(TempFile.getPath());
String[] separatedRes = videoResolution.split("x");
mediaRecorder.setVideoSize(Integer.parseInt(separatedRes[0]),Integer.parseInt(separatedRes[1]));
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.prepare();
mediaRecorder.start();
recordingStatus = true;
return true;
}
catch (IllegalStateException e) {
Log.d(TAG,e.getMessage());
e.printStackTrace();
return false;
}
catch (IOException e) {
Log.d(TAG,e.getMessage());
e.printStackTrace();
return false;
}
}
public void stopRecording() {
Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show();
mediaRecorder.reset();
mediaRecorder.release();
recordingStatus = false;
}
}
答案 0 :(得分:0)
要获取目录的当前大小,您需要使用length()
方法在目录中添加每个单独文件的大小。 This article就是你在这方面所寻求的。然后,您可以检查大小是否超过1 GB。
在自动删除最旧的文件方面,您可以执行以下操作:
File directory = new File(*String for absolute path to directory*);
File[] files = directory.listFiles();
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}
});
file[0].delete();
此代码获取数组中的所有文件,并根据其修改/创建日期对其进行排序。然后,数组中的第一个文件是最旧的文件,因此您只需删除它即可。
将此内容放入代码中的最佳位置是当您要将某些内容写入目录时。首先执行此检查和删除,然后如果大小小于1 GB,请写入目录,否则删除另一个文件。