Ошибка IllegalStateException в Android Studio
Я новичок в Android Studio. Я хочу записать видео в Google Glass App. Я попробовал несколько способов сделать код приложения, но я получил ошибку IllegalStateException. Я сделал код, который записывает видео 1 секунду. Я не добавил код аудиозаписи, потому что мне не нужен звук. Мне нужен только источник видео.
import java.io.File;
import java.io.IOException;
import android.annotation.SuppressLint;
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;
@SuppressLint("Registered")
public class VideoActivity extends Activity {
String fileOutput = "DCIM/Camera/imgtest.mp4";
String path = Environment.getExternalStorageDirectory() + File.separator + fileOutput;
//private android.hardware.Camera mCamera;
private Camera mCamera;
private MediaRecorder mediaRecorder;
SurfaceHolder holder;
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try
{
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (mCamera != null)
{
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null)
{
mCamera.stopPreview();
//mCamera = null;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCamera = Camera.open();
setContentView(R.layout.main);
setContentView(R.layout.preview);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
SurfaceView mPreview = (SurfaceView) findViewById(R.id.preview);
holder = mPreview.getHolder();
holder.addCallback(surfaceCallback);
if (mCamera != null) {
if (mediaRecorder != null) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
File videofile = new File(path);
if (videofile.exists()) {
videofile.deleteOnExit();
}
mediaRecorder = new MediaRecorder();
mCamera.lock();
mCamera.unlock();
mediaRecorder.setCamera(mCamera);
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.setPreviewDisplay(holder.getSurface());
mediaRecorder.setOutputFile(path);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaRecorder.start();
}
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
}
Я получил ошибку:
E/MediaRecorder: start called in an invalid state: 4
D/AndroidRuntime: Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41dc9bd8)
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.glass.transfer1, PID: 1712
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.glass.transfer1/com.example.glass.transfer1.VideoActivity}: java.lang.IllegalStateException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2235)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2285)
at android.app.ActivityThread.access$800(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5061)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException
at android.media.MediaRecorder.start(Native Method)
at com.example.glass.transfer1.VideoActivity.onCreate(VideoActivity.java:97)
at android.app.Activity.performCreate(Activity.java:5236)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1089)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2285)
at android.app.ActivityThread.access$800(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5061)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
at dalvik.system.NativeStart.main(Native Method)
Эта ошибка из строки 97: mediaRecorder.start();
Я не знаю, почему появилась эта ошибка, я просто знаю, что эта ошибка появляется при добавлении в уже вызванный код. Я готов получить ваш совет и попробовать это. Помогите мне, пожалуйста. Я постараюсь исправить эту ошибку, дождавшись ваших советов.
Я добавил реализацию com.android.support:appcompat-v7:19.1.0, но я все еще получаю сообщение "невозможно разрешить". Модуль: приложение это:
apply plugin: 'com.android.application'
android {
compileSdkVersion "Google Inc.:Glass Development Kit Preview:19"
buildToolsVersion "28.0.1"
defaultConfig {
applicationId "com.example.glass.transfer1"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:19.1.0'
}
Как я могу расширить AppCompatActivity?