我已经在各种手机上测试了我的应用程序。我的应用程序的主要功能是通过手机摄像头拍照和录像。我在大多数手机上没有遇到问题,但在Motorola DROID RAZR上确实遇到了这个问题。当我拍照时,我的申请表工作得很好。但当我录制视频时,我面临一个问题。当我录制视频时,我会看到一个空白屏幕。手机屏幕上没有显示预览。我不知道为什么会发生这种事,但在大多数手机上都很好用。在这部手机上拍照(Droid Razr)。
摩托罗拉Droid Razr配置,
操作系统:android v2.3.5。
摄像机:高清摄像机,8MP。
处理器:TI OMAP4430
这是我的密码,

Camera camera = Camera.open();
Parameters params = camera.getParameters();
camera.setDisplayOrientation(90);
camera.setParameters(params);
camera.setDisplayOrientation(90);

MediaRecorder recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setVideoSize(640, 480);
recorder.setMaxDuration(25000);
recorder.setOrientationHint(90);

更新:
我已经在摩托罗拉Droid Razr模拟器上测试了这个应用程序。我有个例外,
MediaRecorder(430): prepare failed: -17
System.err(430): java.io.IOException: prepare failed.
System.err(430):    at android.media.MediaRecorder._prepare(Native Method)
System.err(430):    at android.media.MediaRecorder.prepare(MediaRecorder.java:590)

但是我没有在我的另一个模拟器上得到这个异常。如何解决这个问题?

最佳答案

最后我找到了解决办法。下面的代码适用于所有设备。;)

        Holder holder = getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        Camera camera = Camera.open();
        try {
            camera.setPreviewDisplay(holder);
            camera.startPreview();
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
        }

        camera.unlock();
        MediaRecorder recorder = new MediaRecorder();
        recorder.setCamera(camera);
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setVideoSize(640, 480);
        recorder.setVideoFrameRate(20);
        recorder.setVideoEncodingBitRate(3000000);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

        try {

            String videopath = File.createTempFile("video", ".mp4")
                    .getAbsolutePath();

            recorder.setOutputFile(videopath);

        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        recorder.setPreviewDisplay(holder.getSurface());

10-08 15:04