Kamera-App funktioniert nicht?

Ich habe folgende Stack-Trace

<code>04-17 12:11:56.378: D/ATRecorder(10379): com.htc.autotest.dlib.RecordEngine in loader dalvik.system.DexClassLoader@40528b78
04-17 12:11:56.408: D/WindowManagerImpl(10379): addView, new view, mViews[0]: com.android.internal.policy.impl.PhoneWindow$DecorView@40520738
04-17 12:11:56.428: D/WindowManagerImpl(10379): addView, new view, mViews[1]: android.widget.LinearLayout@40525d00
04-17 12:11:56.438: D/WindowManagerImpl(10379): finishRemoveViewLocked, mViews[1]: android.widget.LinearLayout@40525d00
04-17 12:11:56.718: D/TAG(10379): Error setting camera preview: setPreviewDisplay failed
04-17 12:11:56.748: D/TAG(10379): Error starting camera preview: setPreviewDisplay failed
04-17 12:12:07.558: D/View(10379): onTouchEvent: viewFlags: 0x18004001
04-17 12:12:07.568: D/View(10379): onTouchEvent: isFocusable: true, isFocusableInTouchMode: false, isFocused: false; focusTaken: false
04-17 12:12:07.588: V/MediaRecorderJNI(10379): start
04-17 12:12:07.598: V/MediaRecorderJNI(10379): getMediaRecorder E
04-17 12:12:11.632: V/MediaRecorderJNI(10379): process_media_recorder_call
04-17 12:12:11.642: W/IMediaDeathNotifier(10379): media server died
04-17 12:12:11.642: V/MediaRecorderJNI(10379): JNIMediaRecorderListener::notify
04-17 12:12:11.642: V/MediaRecorderJNI(10379): notify msgType 0x1, ext1 0x64
04-17 12:12:11.642: W/Camera(10379): ICamera died
04-17 12:12:11.642: W/Camera(10379): Camera server died!
04-17 12:12:11.702: E/Camera(10379): Error 100
</code>

und mein Code ist

<code>public class VideoDemoActivity extends Activity {
/** Called when the activity is first created. */

private Camera mCamera;
private CameraPreview mPreview;
private Button btnCapture,btnStop;

private MediaRecorder mMediaRecorder;
FrameLayout preview;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    initialize();

    if (!checkCameraHardware(this)) {

        Toast.makeText(this, "Camera not found", Toast.LENGTH_SHORT).show();
        finish();

    } else {

        Toast.makeText(this, "Camera found", Toast.LENGTH_SHORT).show();
    }

    mCamera = getCameraInstance();
    mPreview = new CameraPreview(this, mCamera);
    preview.addView(mPreview);

    System.out.println(prepareVideoRecorder());


    btnCapture.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {

                mMediaRecorder.start();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    });

    btnStop.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mMediaRecorder.stop();
        }
    });

}

private void initialize() {
    // TODO Auto-generated method stub

    preview = (FrameLayout) findViewById(R.id.camera_preview);
    btnCapture = (Button) findViewById(R.id.button_capture);
    btnStop = (Button) findViewById(R.id.button_stop);
}

public Camera getCameraInstance(){
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    }
    catch (Exception e){

        e.printStackTrace();

    }
    return c; // returns null if camera is unavailable
}

private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

     releaseMediaRecorder();       // if you are using MediaRecorder, release it first
     releaseCamera();              // release the camera immediately on pause event

}

private boolean prepareVideoRecorder(){


    mMediaRecorder = new MediaRecorder();


    mCamera.unlock();
    mMediaRecorder.setCamera(mCamera);

    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    mMediaRecorder.setOutputFile(getOutputMediaFile().toString());



    try 
    {
        mMediaRecorder.prepare();

    } catch (IllegalStateException e) {
        e.printStackTrace();
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        releaseMediaRecorder();
        return false;
    }
    return true;
}

private void releaseMediaRecorder(){
    if (mMediaRecorder != null) {
        mMediaRecorder.reset();   // clear recorder configuration
        mMediaRecorder.release(); // release the recorder object
        mMediaRecorder = null;
        mCamera.lock();           // lock camera for later use
    }
}

private void releaseCamera(){
    if (mCamera != null){
        mCamera.release();        // release the camera for other applications
        mCamera = null;
    }
}

private static File getOutputMediaFile(){

     File mediaFile = new File(Environment.getExternalStorageDirectory()+"/video.mp4");

    return mediaFile;
}
</code>

}

Bitte helfen Sie mir bei der Lösung dieses Problems. Wenn ich die Methode entferne

prepareVideoRecorder ()

dann wird die Kamera korrekt in der Vorschau angezeigt. Nach der Ausführung dieser Methode wird jedoch keine Vorschau angezeigt. Andernfalls tritt ein Fehler auf

mMediaRecorder.start ();

bitte hilf mir raus ..

Antworten auf die Frage(2)

Ihre Antwort auf die Frage