Я новичок в Android Studio. Я делаю Google Glass App для записи видео, но появилась ошибка камеры. Я пробовал решения в StackOverflow
, я не мог решить эту ошибку.
Код моего приложения здесь:
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
public class VideoActivity extends Activity implements SurfaceHolder.Callback {
String fileOutput = "DCIM/Camera/imgtest.mp4";
String path = Environment.getExternalStorageDirectory() + File.separator + fileOutput;
private android.hardware.Camera mCamera;
private MediaRecorder mediaRecorder;
SurfaceHolder mHolder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.preview);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
SurfaceView mPreview = (SurfaceView)findViewById(R.id.preview);
mHolder = mPreview.getHolder();
mHolder.addCallback(this);
mPreview.postDelayed(Record, 500);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
this.setCameraParameters(mCamera);
try {
mCamera.setPreviewDisplay(holder);
} catch (Exception e) {
this.releaseCamera();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (mCamera != null) {
mCamera.startPreview();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
this.releaseCamera();
}
public void releaseCamera() {
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
public void setCameraParameters(Camera camera) {
if (camera != null) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFpsRange(30000, 30000);
camera.setParameters(parameters);
}
}
@Override
protected void onResume() {
super.onResume();
if (mCamera != null) {
releaseCamera();
}
}
@Override
protected void onPause() {
super.onPause();
if (mCamera != null) {
releaseCamera();
}
}
private boolean Recording ()
{
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mediaRecorder.setMaxDuration(1000);
mediaRecorder.setCaptureRate(15);
mediaRecorder.setVideoFrameRate(15);
mediaRecorder.setOutputFile(path);
mediaRecorder.setPreviewDisplay(mHolder.getSurface());
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
mediaRecorder.release();
return false;
}
return true;
}
private Runnable Record = new Runnable()
{
@Override
public void run() {
if (Recording()) {
mediaRecorder.start();
}
}
};
}
Код ошибки:
D/RenderScript: Load RS driver 'libRSDriver.so' successfully.
V/AppDrawer: surfaceDestroyed
W/View: requestLayout() improperly called by android.widget.FrameLayout{212a561c V.E..... ......ID 0,0-640,360} during layout: running second layout pass
D/CardScrollView: Deactivating.
D/SliderSubMenuProvider: Close top-level menu
D/SliderMenuView: Performed action on 1 : true
I/Choreographer: Skipped 46 frames! The application may be doing too much work on its main thread.
I/MediaRecorderJNI: prepare: surface=0x59f6ea28
I/Choreographer: Skipped 33 frames! The application may be doing too much work on its main thread.
W/IMediaDeathNotifier: media server died
W/CameraBase: Camera service died!
W/CameraBase: mediaserver's remote binder Camera object died
E/Camera: Error 100
W/SurfaceComposerClient: ComposerService remote (surfaceflinger) died [0x591f3a40]
E/DisplayEventReceiver: Display event receiver pipe was closed or an error occurred. events=0x9
Application terminated.
Я получил эту ошибку, и Google Glass перезагрузился.
В другом посте ответ они решили, добавив mediaRecorder.setPreviewDisplay(mHolder.getSurface());
, но я не смог устранить эту ошибку.
Другой ответ дал мне решение, которое попробуйте parameters.setRecordingHint(true);
. Я попытался это решение, но я не мог решить.
Я не знаю почему. Я хочу устранить эту ошибку. пожалуйста, помогите мне.