Ошибка 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?

0 ответов

Другие вопросы по тегам