Android智能电视盒有Rockchip-cs968a相机问题

时间:2014-11-03 12:51:22

标签: android android-camera

我正在使用拥有Rockchip-cs968a的Android智能电视盒。 我无法捕捉图像。 它在运行时抛出此设备的错误

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

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;
        }
    }

1 个答案:

答案 0 :(得分:0)

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

<强> com.android.hardware.camera

我通过开发人员DOC发现21岁以上的版本这个api已被弃用

现在他们正在使用

com.android.hardware.camera2 包含一些不同类型的相机调用