gpt4 book ai didi

java - 如何在 Google Glass 应用中录制视频?

转载 作者:行者123 更新时间:2023-12-02 10:52:44 24 4
gpt4 key购买 nike

我尝试使用 Android Studio 录制程序。但我收到了一些错误。

package com.example.glass.transfer1;

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.Window;
import android.view.WindowManager;

@SuppressLint("Registered")
public class VideoActivity extends Activity {
String fileOutput = "DCIM/Camera/imgtest.mp4";
String path = Environment.getExternalStorageDirectory() + fileOutput;
private android.hardware.Camera mCamera;
private MediaRecorder mediaRecorder;
SurfaceHolder holder;

/*@Override
public void surfaceCreated(SurfaceHolder holder)
{
try
{
mCamera = Camera.open();
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
if (mCamera != null)
{
mCamera.startPreview();
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
if (mCamera != null)
{
mCamera.stopPreview();
mCamera = null;
}
}*/

SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try
{
mCamera = Camera.open();
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (mCamera != null)
{
mCamera.startPreview();
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null)
{
mCamera.stopPreview();
mCamera = null;
}
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mVideo = (VideoView) findViewById(R.id.preview);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
SurfaceView mPreview = (SurfaceView) findViewById(R.id.preview);
setContentView(R.layout.preview);
holder = mPreview.getHolder();
holder.addCallback(surfaceCallback);
Record(holder);
}

private void Record(SurfaceHolder holder)
{
if (mediaRecorder != null)
{
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}

File videofile = new File(path);
if (videofile.exists()) {
videofile.delete();
}
if (mCamera != null)
{
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
try
{
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//mediaRecorder.setVideoSize(1280, 720);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mediaRecorder.setMaxDuration(1000);
mediaRecorder.setCaptureRate(15);
mediaRecorder.setVideoFrameRate(15);
mediaRecorder.setPreviewDisplay(holder.getSurface());
mediaRecorder.setOutputFile(path);
//mCamera.unlock();
mediaRecorder.setCamera(mCamera);
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}

我收到错误:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.glass.transfer1, PID: 14146 java.lang.RuntimeException: Unable to start activity >ComponentInfo{com.example.glass.transfer1/com.example.glass.transfer1.VideoActivity}: java.lang.NullPointerException 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.NullPointerException at >com.example.glass.transfer1.VideoActivity.onCreate(VideoActivity.java:94) 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) 

如何修复此错误?谢谢。

最佳答案

您收到 java.lang.NullPointerException 异常,因为您在 setContentView 之前调用 findViewById

   @Override
public void onCreate(Bundle savedInstanceState) {
/..

SurfaceView mPreview = (SurfaceView) findViewById(R.id.preview);
setContentView(R.layout.preview);

/..
}

setContentView 方法为 documentation说:

Set the activity content to an explicit view. This view is placed directly into the activity's view hierarchy.

因此,您尝试查找特定 View ,即 SurfaceView,其 id 为 preview,而不将 View 设置为 Activity。

你应该尝试在它们之间切换

setContentView(R.layout.preview);
SurfaceView mPreview = (SurfaceView) findViewById(R.id.preview);

关于java - 如何在 Google Glass 应用中录制视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com