Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SurfaceView没有';t显示摄像机_Java_Android - Fatal编程技术网

Java SurfaceView没有';t显示摄像机

Java SurfaceView没有';t显示摄像机,java,android,Java,Android,我试图在我的android应用程序中显示一个摄像头,但我得到的只是一个位于SurfaceView的黑盒子 我使用的是这个简单的XML布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" an

我试图在我的android应用程序中显示一个摄像头,但我得到的只是一个位于
SurfaceView
的黑盒子

我使用的是这个简单的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.lazylayer.photoshoot.MainActivity">

    <SurfaceView
        android:id="@+id/surface_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

通过这项活动:

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {

    SurfaceView surfaceView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        surfaceView = (SurfaceView)findViewById(R.id.surface_view);

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try{
            CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);

            String[] cameras = cameraManager.getCameraIdList();
            cameraManager.openCamera(cameras[0], deviceCallback, null);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {}


    CameraDevice.StateCallback deviceCallback = new CameraDevice.StateCallback() {

        @Override
        public void onOpened(CameraDevice camera) {
            try {
                List<Surface> surfaceList = Collections.singletonList(surfaceView.getHolder().getSurface());
                camera.createCaptureSession(surfaceList, sessionCallback, null);
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onDisconnected(CameraDevice camera) {}

        @Override
        public void onError(CameraDevice camera, int error) {}
    };

    CameraCaptureSession.StateCallback sessionCallback = new CameraCaptureSession.StateCallback() {
        @Override
        public void onConfigured(CameraCaptureSession session) {
        }

        @Override
        public void onConfigureFailed(CameraCaptureSession session) {}
    };
}
public类MainActivity扩展AppCompatActivity实现SurfaceHolder.Callback{
表面视图表面视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView=(surfaceView)findViewById(R.id.surface\U视图);
}
@凌驾
已创建的公共空白表面(表面持有人){
试一试{
CameraManager CameraManager=(CameraManager)getSystemService(Context.CAMERA_服务);
String[]cameras=cameraManager.getCameraIdList();
openCamera(cameras[0],deviceCallback,null);
}捕获(CameraAccessE异常){
e、 printStackTrace();
}
}
@凌驾
public void surfacechange(SurfaceHolder持有者,int格式,int宽度,int高度){}
@凌驾
公开作废表面作废(表面持有人){}
CameraDevice.StateCallback deviceCallback=新建CameraDevice.StateCallback(){
@凌驾
打开公共空间(摄像头副摄像头){
试一试{
List surfaceList=Collections.singletonList(surfaceView.getHolder().getSurface());
createCaptureSession(surfaceList,sessionCallback,null);
}捕获(CameraAccessE异常){
e、 printStackTrace();
}
}
@凌驾
已断开连接的公共无效(摄像头设备摄像头){}
@凌驾
public void onError(CameraDevice camera,int error){}
};
CameraCaptureSession.StateCallback sessionCallback=新建CameraCaptureSession.StateCallback(){
@凌驾
未配置公共void(CameraCaptureSession会话){
}
@凌驾
配置文件的公共无效(CameraCaptureSession会话){}
};
}
以下是在我的手机上运行应用程序时显示的内容:


我能够通过使用
FrameLayout
而不是
SurfaceView来解决这个问题

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/camera_view">
</FrameLayout>

您在清单上添加权限了吗?我有