Android智能电视盒存在Rockchip-cs968a摄像头问题

Android智能电视盒存在Rockchip-cs968a摄像头问题,android,android-camera,Android,Android Camera,我使用的是安卓智能电视盒,带有Rockchip-cs968a。 我无法捕捉图像。 它在运行时对此设备抛出错误 以下是我正在使用的代码: package com.android.camerarecorder; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; impor

我使用的是安卓智能电视盒,带有Rockchip-cs968a。 我无法捕捉图像。 它在运行时对此设备抛出错误

以下是我正在使用的代码:

package com.android.camerarecorder;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.hardware.Camera;
    import android.hardware.Camera.CameraInfo;
    import android.hardware.Camera.PictureCallback;
    import android.os.Environment;
    import android.util.Log;
    import android.view.SurfaceView;

    public class CameraController {

        private Context context;

        private boolean hasCamera;

        private Camera camera;
        private int cameraId;

        public CameraController(Context c){
            context = c.getApplicationContext();

            if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
                cameraId = getFrontCameraId();

                if(cameraId != -1){
                    hasCamera = true;
                }else{
                    hasCamera = false;
                }
            }else{
                hasCamera = false;
            }
        }

        public boolean hasCamera(){
            return hasCamera;
        }

        public void getCameraInstance(){
            camera = null;

            if(hasCamera){
                try{
                  //  camera = Camera.open(cameraId);
                     camera = Camera.open(cameraId);
                    prepareCamera();
                }
                catch(Exception e){
                    hasCamera = false;
                }
            }
        }

        public void takePicture(){
            if(hasCamera){
                camera.takePicture(null,null,mPicture);
            }
        }

        public void releaseCamera(){
            if(camera != null){
                camera.stopPreview();
                camera.release();
                camera = null;
            }
        }

        private int getFrontCameraId(){
            int camId = -1;
            int numberOfCameras = Camera.getNumberOfCameras();
            CameraInfo ci = new CameraInfo();

            for(int i = 0;i < numberOfCameras;i++){
                Camera.getCameraInfo(i,ci);
                if(ci.facing == CameraInfo.CAMERA_FACING_FRONT){
                    camId = i;
                }
            }

            return camId;
        }

        private void prepareCamera(){
            SurfaceView view = new SurfaceView(context);

            try{
                camera.setPreviewDisplay(view.getHolder());
            }catch(IOException e){
                throw new RuntimeException(e);
            }

            camera.startPreview();

            Camera.Parameters params = camera.getParameters();
            params.setJpegQuality(100);

            camera.setParameters(params);  
        }

        private PictureCallback mPicture = new PictureCallback(){
            @Override
            public void onPictureTaken(byte[] data, Camera camera){
                File pictureFile = getOutputMediaFile();

                if(pictureFile == null){
                    Log.d("TEST", "Error creating media file, check storage permissions");
                    return;
                }

                try{
                    Log.d("TEST","File created");
                    FileOutputStream fos = new FileOutputStream(pictureFile);
                    fos.write(data);
                    fos.close();
                }catch(FileNotFoundException e){
                    Log.d("TEST","File not found: "+e.getMessage());
                } catch (IOException e){
                    Log.d("TEST","Error accessing file: "+e.getMessage());
                }
            }
        };

        private File getOutputMediaFile(){
            // To be safe, you should check that the SDCard is mounted
            // using Environment.getExternalStorageState() before doing this.

            File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");

            // This location works best if you want the created images to be shared
            // between applications and persist after your app has been uninstalled.

            // Create the storage directory if it does not exist
            if(!mediaStorageDir.exists()){
                if(!mediaStorageDir.mkdirs()){
                    return null;
                }
            }

            // Create a media file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

            File mediaFile;
            mediaFile = new File(mediaStorageDir.getPath()+File.separator+"IMG_"+timeStamp+".jpg");

            return mediaFile;
        }
    }

我发现我正在使用的设备无法使用

com.android.hardware.camera

我翻阅了开发者文档,发现这个api的21以上版本已经被弃用了

现在,他们正在使用


com.android.hardware.camera2包含一些不同类型的摄像头调用

我无法通过代码捕获图像。您并不是一开始就试图捕捉图片。您没有演示如何使用CameraController类。请尝试{cc.getCameraInstance;cc.takePicture;}捕获异常e{//TODO自动生成的捕获块e.printStackTrace;}在buil camera应用程序中使用photospherehelper,tinyplanetWhich引发错误?关于哪个语句/代码?请把航海日志寄出去。您没有在getCameraInstance之后检查hasCamera。调用take picture catch子句后,显示运行时拍摄失败的异常