Как мне разместить ограниченное максимальное пространство для хранения каталогов в SD? - PullRequest
0 голосов
/ 27 апреля 2011

Предположительно, я хотел выделить только 1 ГБ места для хранения моих видео в определенном каталоге файлов, где как происходит автоматическое удаление самого старого видеофайла в этом каталоге, когда он достигнет / достигнет 1 ГБ?

Извините, я новичок в java / android и в настоящее время создаю автомобильное приложение для черного ящика, может кто-нибудь мне помочь ... Спасибо

Это то, что я пробовал до сих пор, может кто-нибудь сказать мне, как я должен реализовать вышеупомянутую функцию упоминания в моей активности CameraTest:

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;
}
}

1 Ответ

0 голосов
/ 27 апреля 2011

Чтобы получить текущий размер каталога, вам нужно сложить размеры каждого отдельного файла в каталоге, используя метод length(). Эта статья - это то, что вы ищете в этом отношении.Затем вы можете проверить, превышает ли размер 1 ГБ.

С точки зрения автоматического удаления самого старого файла вы можете сделать следующее:

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 ГБ, запишите в каталог, в противном случае удалите другой файл.

...