0

私はビデオ録画カメラAPPに取り組んでいます。ビデオのサイズが非常に小さいため、カメラを起動した直後にカメラを停止すると、アプリがクラッシュします。動画のサイズが 1 秒を超える場合にのみ停止ボタンを有効にしたい。しかし問題は、現在の時刻と開始時刻が正しく見つからないことです。2 つの時間要素の差を見つけることは、2 秒チェックの実装に役立ちます。助けが必要です。

private void onClickActions(View v)
{
    float tt = start_time /10000000000000f;
    float ct = ((System.currentTimeMillis() ) /10000000000000f);

    Log.d("Before stoping S-Time ",tt+"");
    Log.d("Before stoping C-Time ",ct+"");

    if (recording  && tt>=2.0f)
     {
         Log.d("After Stopping = ",tt+"");
        // stop recording and release camera
        mediaRecorder.stop(); // stop the recording
        recording = false;
        rec.setVisibility(View.INVISIBLE);
        start_time = 0;

    }

    //remove time code to initial revert
    if(v.getId()== start.getId() && ((CameraPreview.recordHappy || CameraPreview.recordSad))) {
        prepareMediaRecorder();
        recording = true;
        mediaRecorder.start();
        consent = true;
        happyRecorded=true;
        stop.setClickable(true);
        start.setClickable(false);

        if (AndroidVideoCaptureExample.iV.getVisibility()==View.VISIBLE)
        AndroidVideoCaptureExample.iV.setVisibility(View.INVISIBLE);
        //AndroidVideoCaptureExample.capture.setText("RECORDING STARTED!");

        rec.setVisibility(View.VISIBLE);
        start_time = (int)(System.currentTimeMillis());
        //Toast.makeText(myContext, "You are being recorded now!", Toast.LENGTH_LONG);

    }
    if(v.getId()== stop.getId() && consent==true && recording==false) {

        if((!CameraPreview.recordHappy && CameraPreview.recordSad))
        {
            releaseMediaRecorder(); // release the MediaRecorder object
            Intent intent = new Intent();
            intent.setClass(AndroidVideoCaptureExample.this, consentActivity.class);
            startActivity(intent);
            finish();
        }
        else {
            CameraPreview.recordHappy = false;
            CameraPreview.recordSad = true;
            stop.setClickable(false);
            start.setClickable(true);
            recording = false;
            AndroidVideoCaptureExample.capture.setText("Record Neutral Moment");
            rec.setVisibility(View.INVISIBLE);

        }
    }
}
4

1 に答える 1

1

単純なことを過剰に設計している可能性があると思います。UI に表示しない限り、記録時間をカウントする必要はありません。ボタンを無効にしたい場合は、記録を開始する直前に無効にしてから、Handler2 秒後に再度有効にします。

        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                // enable stop button
            }
        },2000);

しかし、それはあまり良いユーザー エクスペリエンスではないと私は主張します。Google Camera のようなカメラを見ると、開始後すぐに停止できますが、何も記録されません。これを実現するにはRuntimeException、呼び出し時にをキャッチmediaRecorder.stop()し、生成されたファイルをチェックしてクリーンアップする必要があります。空の場合は削除し、UI にエラーをスローしないでください。

于 2015-12-16T18:09:47.233 に答える