Android-java.lang.RuntimeException:takePicture失败-是否有解决方案来解决所有人的此异常? 公共类CameraActivity扩展活动{ 私人摄像机麦卡梅拉; 私人摄像审查; 私有框架布局; 私有布尔msafetoakepicture; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_摄像头); Bundle Bundle=savedInstanceState; 如果(savedInstanceState==null){ bundle=getIntent().getExtras(); } mFramePreview=(FrameLayout)findViewById(R.id.camera\u preview); msafetoakepicture=false; } @凌驾 受保护的void onResume(){ super.onResume(); //创建摄影机的实例 mCamera=getCameraInstance(); Camera.Parameters params=mCamera.getParameters(); List supportedSizes=mCamera.getParameters().getSupportedPictureSizes(); int max=0; int指数=0; 对于(int i=0;i最大值){ 指数=i; 最大值=尺寸; } } 参数setPictureSize(supportedSizes.get(索引).宽度,supportedSizes.get(索引).高度); mCamera.setParameters(参数); mCamera.getParameters().setPictureSize(supportedSizes.get(index).width,supportedSizes.get(index).height); //创建预览视图并将其设置为活动的内容。 mPreview=新的CameraPreview(这是mCamera); mFramePreview.addView(mPreview); msafetoakepicture=true; mFramePreview.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ if(MSAFETOTAKIENT){ 拍照(); mFramePreview.setOnClickListener(null); msafetoakepicture=false; } } }); } 公众拍照{ mCamera.autoFocus(新相机.AutoFocusCallback(){ @凌驾 自动对焦上的公共空白(布尔b,摄像头摄像头){ mCamera.takePicture(null,null,picture); } }); } final Camera.PictureCallback picture=新的Camera.PictureCallback(){ @凌驾 公共void onPictureTaken(字节[]数据,摄像头){ /*保存图片*/ } }; }

Android-java.lang.RuntimeException:takePicture失败-是否有解决方案来解决所有人的此异常? 公共类CameraActivity扩展活动{ 私人摄像机麦卡梅拉; 私人摄像审查; 私有框架布局; 私有布尔msafetoakepicture; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_摄像头); Bundle Bundle=savedInstanceState; 如果(savedInstanceState==null){ bundle=getIntent().getExtras(); } mFramePreview=(FrameLayout)findViewById(R.id.camera\u preview); msafetoakepicture=false; } @凌驾 受保护的void onResume(){ super.onResume(); //创建摄影机的实例 mCamera=getCameraInstance(); Camera.Parameters params=mCamera.getParameters(); List supportedSizes=mCamera.getParameters().getSupportedPictureSizes(); int max=0; int指数=0; 对于(int i=0;i最大值){ 指数=i; 最大值=尺寸; } } 参数setPictureSize(supportedSizes.get(索引).宽度,supportedSizes.get(索引).高度); mCamera.setParameters(参数); mCamera.getParameters().setPictureSize(supportedSizes.get(index).width,supportedSizes.get(index).height); //创建预览视图并将其设置为活动的内容。 mPreview=新的CameraPreview(这是mCamera); mFramePreview.addView(mPreview); msafetoakepicture=true; mFramePreview.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ if(MSAFETOTAKIENT){ 拍照(); mFramePreview.setOnClickListener(null); msafetoakepicture=false; } } }); } 公众拍照{ mCamera.autoFocus(新相机.AutoFocusCallback(){ @凌驾 自动对焦上的公共空白(布尔b,摄像头摄像头){ mCamera.takePicture(null,null,picture); } }); } final Camera.PictureCallback picture=新的Camera.PictureCallback(){ @凌驾 公共void onPictureTaken(字节[]数据,摄像头){ /*保存图片*/ } }; },java,android,exception,runtimeexception,Java,Android,Exception,Runtimeexception,我拍照时有时会发生异常情况 RuntimeException->“takePicture失败”(@android.hardware.Camera:native_takePicture:-2)、(@android.hardware.Camera:takePicture:1833)、(@android.hardware.Camera:takePicture:1778)、(@fr.selic.thuit.activities.CameraActivity$2:onAutoFocus:213)、(@an

我拍照时有时会发生异常情况

RuntimeException->“takePicture失败”(@android.hardware.Camera:native_takePicture:-2)、(@android.hardware.Camera:takePicture:1833)、(@android.hardware.Camera:takePicture:1778)、(@fr.selic.thuit.activities.CameraActivity$2:onAutoFocus:213)、(@android.hardware.Camera$EventHandler:handleMessage:1283)、(@android.os.Handler:dispatchMessage:111),(@android.os.Looper:loop:207),(@android.app.ActivityThread:main:5728),(@java.lang.reflect.Method:invoke:-2),(@com.android.internal.os.ZygoteInit$MethodAndArgsCaller:run:789),(@com.android.internal.os.zgoteinit:main:679)


我们需要更多信息,更详细地解释问题是什么,并包括logcat错误。你能分享完整的stacktrace吗?我编辑了这篇文章,如果你想了解更多信息,请不要犹豫。如果可能的话,展示你的活动,这个问题发生的地方。你提供的一小段代码没有多大帮助。预览必须在开始之前开始你可以拍照,你是先这么做的吗?在打开预览之前拍照是不可能的。我添加了代码,希望这会有所帮助。
public class CameraActivity extends Activity {

     private Camera mCamera;

     private CameraPreview mPreview;

     private FrameLayout mFramePreview;

     private boolean mSafeToTakePicture;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_camera);

         Bundle bundle = savedInstanceState;
         if (savedInstanceState == null) {
             bundle = getIntent().getExtras();
         }

         mFramePreview = (FrameLayout) findViewById(R.id.camera_preview);

         mSafeToTakePicture = false;
     }

     @Override
     protected void onResume() {
         super.onResume();

         // Create an instance of Camera
         mCamera = getCameraInstance();
         Camera.Parameters params = mCamera.getParameters();

         List<Camera.Size> supportedSizes = mCamera.getParameters().getSupportedPictureSizes();
         int max = 0;
         int index = 0;

         for (int i = 0; i < supportedSizes.size(); i++){
             Camera.Size s = supportedSizes.get(i);
             int size = s.height * s.width;
             if (size > max) {
                 index = i;
                 max = size;
             }
         }
         params.setPictureSize(supportedSizes.get(index).width,      supportedSizes.get(index).height);
         mCamera.setParameters(params);
                   mCamera.getParameters().setPictureSize(supportedSizes.get(index).width, supportedSizes.get(index).height);

         // Create our Preview view and set it as the content of our activity.
         mPreview = new CameraPreview(this, mCamera);
         mFramePreview.addView(mPreview);
         mSafeToTakePicture = true;

         mFramePreview.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 if (mSafeToTakePicture) {
                     takePhoto();
                     mFramePreview.setOnClickListener(null);
                     mSafeToTakePicture = false;
                 }
             }
         });
     }

     public void takePhoto() {
         mCamera.autoFocus(new Camera.AutoFocusCallback() {
             @Override
             public void onAutoFocus(boolean b, Camera pCamera) {
                 mCamera.takePicture(null, null, picture);
             }
         });
     }

     final Camera.PictureCallback picture = new Camera.PictureCallback() {
         @Override
         public void onPictureTaken(byte[] data, Camera camera) {
             /* save picture... */
         }
     };
}