使用相机,但不想拍照

时间:2014-07-31 06:16:02

标签: android

我想在我的应用程序中使用相机,但不想拍照,实际上我正在制作一个应用程序即透明屏幕,在此我要显示透明壁纸,即我必须为此开始相机,我不想拍这个图像

我尝试了所有这些代码,但没有得到理想的结果。任何人都可以建议我该怎么做?  在所有情况下都使用此权限

<uses-permission android:name="android.permission.CAMERA"/>



 Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);

Intent intent = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
startActivity(intent);

    Intent intent = new Intent(android.provider.MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
    startActivity(intent);

更新1:

我尝试了这个代码,它以不正确的方式显示相机,它将预览转移到右边,仔细查看这个更新的代码并告诉我可以对此进行修改

public class MainActivity extends Activity {

    private Preview mPreview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try{
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // Create our Preview view and set it as the content of our activity.
        mPreview = new Preview(this);
        setContentView(mPreview);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

******************************************************************************************

public class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;

Preview(Context context) {
    super(context);

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    try{
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }catch(Exception e){
        e.printStackTrace();
    }
}

public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    try{
        if(mCamera!=null){
            mCamera.release();
            mCamera=null;
        }
    mCamera = Camera.open();
  Log.i("Camera", "Camera is opened");
        mCamera.setPreviewDisplay(holder);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's very
    // important to release it when the activity is paused.
    try{
    mCamera.stopPreview();
    mCamera.release();
    mCamera = null;
    }catch(Exception e){
        e.printStackTrace();
    }
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // Now that the size is known, set up the camera parameters and begin
    // the preview.
    try{
    Parameters parameters = mCamera.getParameters();
    List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();  
    Camera.Size cs = sizes.get(0);  
    parameters.setPreviewSize(cs.width, cs.height);
    mCamera.setParameters(parameters);
    mCamera.startPreview();
    }catch(Exception e){
        e.printStackTrace();
    }
}

}

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要使用surfaceView。这是一个例子:

    public class CameraPreview extends Activity {    
        private Preview mPreview;

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

            // Hide the window title.
            requestWindowFeature(Window.FEATURE_NO_TITLE);

            // Create our Preview view and set it as the content of our activity.
            mPreview = new Preview(this);
            setContentView(mPreview);
        }

    }

        public class Preview extends SurfaceView implements SurfaceHolder.Callback {
            SurfaceHolder mHolder;
            Camera mCamera;

            Preview(Context context) {
                super(context);

                // Install a SurfaceHolder.Callback so we get notified when the
                // underlying surface is created and destroyed.
                mHolder = getHolder();
                mHolder.addCallback(this);
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            }

            public void surfaceCreated(SurfaceHolder holder) {
                // The Surface has been created, acquire the camera and tell it where
                // to draw.
                mCamera = Camera.open();
                mCamera.setPreviewDisplay(holder);
            }

            public void surfaceDestroyed(SurfaceHolder holder) {
                // Surface will be destroyed when we return, so stop the preview.
                // Because the CameraDevice object is not a shared resource, it's very
                // important to release it when the activity is paused.
                mCamera.stopPreview();
                mCamera = null;
            }

            public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
                // Now that the size is known, set up the camera parameters and begin
                // the preview.

Camera.Parameters parameters = camera.getParameters();  
   List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();  
   Camera.Size cs = sizes.get(0);  
   parameters.setPreviewSize(cs.width, cs.height);  
   camera.setParameters(parameters);
                mCamera.startPreview();
            }

        }

答案 1 :(得分:0)

我使用了这段代码并且有效......

<uses-permission android:name="android.permission.CAMERA"/>

public class MainActivity extends Activity {

    private Preview mPreview;

    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try{
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // Create our Preview view and set it as the content of our activity.
        mPreview = new Preview(this);
        setContentView(mPreview);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

*****************************************************************************************


public class Preview extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Camera mCamera;

    Preview(Context context) {
        super(context);

        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        try {
            mHolder = getHolder();
            mHolder.addCallback(this);
            mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void surfaceCreated(SurfaceHolder holder) {
        // The Surface has been created, acquire the camera and tell it where
        // to draw.
        try {
            if (mCamera != null) {
                mCamera.release();
                mCamera = null;
            }
            mCamera = Camera.open();
            Log.i("Camera", "Camera is opened");
            mCamera.setPreviewDisplay(holder);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // Surface will be destroyed when we return, so stop the preview.
        // Because the CameraDevice object is not a shared resource, it's very
        // important to release it when the activity is paused.
        try {
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // Now that the size is known, set up the camera parameters and begin
        // the preview.
        try {

            Camera.Parameters parameters = mCamera.getParameters();


            parameters.set("orientation", "portrait");
            mCamera.setDisplayOrientation(90); 

            List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
            Camera.Size cs = sizes.get(0);
            parameters.setPreviewSize(cs.width, cs.height);

            mCamera.setParameters(parameters);
            mCamera.startPreview();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}