Выпуск магнитофона в мото-разр

Я студент, делающий свою задачу приложений Android. И у меня есть проблема, которую я не могу исправить. Пожалуйста, дайте мне несколько советов, спасибо. Я хочу заняться видеозаписью, и я сделал это с помощью этого кода. Запись видео с помощью медиа-рекордера. А вот мой код, он отлично работает в других телефонах, но он не работал в мото-разре. Вот два видео, снятых HTC desire и MOTO razr. desire: http://youtu.be/suPF9Hk6iYk razr: http://youtu.be/wLvH7SXdcIs Может ли кто-нибудь помочь мне решить мою проблему?

package video.pac;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
public class video extends Activity{

private MediaRecorder recorder;
private Preview mPreview;

boolean flag=false; 
boolean startedRecording=false;
boolean stoppedRecording=false;
boolean key = false;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      WindowManager.LayoutParams.FLAG_FULLSCREEN);
  WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

  recorder = new MediaRecorder();
  recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  recorder.setVideoSize(640,480);
  recorder.setVideoFrameRate(20);
  recorder.setVideoEncodingBitRate(3000000);
  recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
  //recorder.setMaxDuration(5000);
  mPreview = new Preview(video.this,recorder);
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  setContentView(mPreview);

 } 

private CountDownTimer mCountDownTimer = new CountDownTimer(9000, 1000) {

    public void onTick(long millisUntilFinished) {}

    public void onFinish() {

        recorder = null;
        System.out.println("stop");
        video.this.finish();
    }
};

class stopThread implements Runnable {   
    public void run() {  

          try {
              mCountDownTimer.start();  
               Thread.sleep(100);    
          } catch (InterruptedException e) {   
               Thread.currentThread().interrupt();   
          }   

    }   
}


class Preview extends SurfaceView implements SurfaceHolder.Callback{
  //Create objects for MediaRecorder and SurfaceHolder.
  SurfaceHolder mHolder;
  MediaRecorder tempRecorder;

  public Preview(Context context,MediaRecorder recorder) {
    super(context);
    tempRecorder=recorder;
    mHolder=getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    // TODO Auto-generated constructor stub
  }

  public Surface getSurface(){
    return mHolder.getSurface();
  }

  public void surfaceCreated(SurfaceHolder holder){

    tempRecorder.setOutputFile("/sdcard/test" + ".3gpp");
    tempRecorder.setPreviewDisplay(mHolder.getSurface());
    try{
      tempRecorder.prepare();
      recorder.start();
     new Thread(new stopThread()).start();

      System.out.println("start");
    } catch (Exception e) {
      tempRecorder.release();
      tempRecorder = null;
    }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
    if(tempRecorder!=null){
      tempRecorder.stop();
      tempRecorder.release();
      tempRecorder = null;
      System.out.println("release");
    }
  }

  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {}
}   
}

1 ответ

Я думаю, что проблема является проблемой безопасности:

вам нужно установить предварительный просмотр рекордера, в противном случае некоторые устройства будут воспринимать это как нарушение безопасности для захвата видео без отображения вашего захвата / предварительного просмотра на экране. Попробуйте добавить это в настройки вашего рекордера:

 .
 .
 recorder.setPreviewDisplay(mHolder.getSurface());
 .
 .
Другие вопросы по тегам