Android 华为拍照闪退

**
 * 自定义的拍照
 *
 *
 */
public class CameraActivity extends Activity implements View.OnClickListener, TakePictureListener{
   private String mSaveRoot;
   private CameraContainer mContainer;
   private ImageButton mCameraShutterButton;
   private ImageButton mRecordShutterButton;
   private ImageView mFlashView;
   private ImageButton mSwitchModeButton;
   private ImageView mSwitchCameraView;
   private ImageView mSettingView;
   private ImageView mVideoIconView;
   private View mHeaderBar;
   private SimpleDraweeView iv_image;
   private String photoPath;
   private RelativeLayout rl_root;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      try {
         Fresco.initialize(this);
         setContentView(R.layout.camera);
      } catch (Exception e) {
         e.printStackTrace();
      // Log.d("CameraActivity");e.getMessage();
      }
      //上面的
      mHeaderBar = findViewById(R.id.camera_header_bar);

      //Camera的容器 继承自RelativeLayout
      mContainer = (CameraContainer) findViewById(R.id.container1);
      
      mVideoIconView = (ImageView) findViewById(R.id.videoicon);
      iv_image = (SimpleDraweeView) findViewById(R.id.iv_image);
      //相机
      mCameraShutterButton = (ImageButton) findViewById(R.id.btn_shutter_camera);
      mRecordShutterButton = (ImageButton) findViewById(R.id.btn_shutter_record);
      mSwitchCameraView = (ImageView) findViewById(R.id.btn_switch_camera);
      //闪光灯
      mFlashView = (ImageView) findViewById(R.id.btn_flash_mode);
      mSwitchModeButton = (ImageButton) findViewById(R.id.btn_switch_mode);
      mSettingView = (ImageView) findViewById(R.id.btn_other_setting);

      mCameraShutterButton.setOnClickListener(this);
      mRecordShutterButton.setOnClickListener(this);
      mFlashView.setOnClickListener(this);
      mSwitchModeButton.setOnClickListener(this);
      mSwitchCameraView.setOnClickListener(this);
      mSettingView.setOnClickListener(this);
      mVideoIconView.setOnClickListener(this);

      mSaveRoot = "";
      mContainer.setRootPath(mSaveRoot);
   }


   @Override
   public void onClick(View view) {
      switch (view.getId()) {
      //拍照
      case R.id.btn_shutter_camera:
         //set TakePictureListener callBack
         mCameraShutterButton.setClickable(false);
         mContainer.takePicture(this);
         break;
      case R.id.videoicon:
         //处理删除的 结果 //
         photoPath = null;
         mCameraShutterButton.setVisibility(View.VISIBLE);
         iv_image.setVisibility(View.GONE);
         mSwitchModeButton.setVisibility(View.INVISIBLE);
         mVideoIconView.setVisibility(View.INVISIBLE);
         mContainer.setVisibility(View.VISIBLE);
         mHeaderBar.setVisibility(View.VISIBLE);       
         
         break;
      case R.id.btn_flash_mode:
         //set light
         if (mContainer.getFlashMode() == FlashMode.ON) {
            mContainer.setFlashMode(FlashMode.OFF);
            mFlashView.setImageResource(R.drawable.btn_flash_off);
         } else if (mContainer.getFlashMode() == FlashMode.OFF) {
            mContainer.setFlashMode(FlashMode.AUTO);
            mFlashView.setImageResource(R.drawable.btn_flash_auto);
         } else if (mContainer.getFlashMode() == FlashMode.AUTO) {
            mContainer.setFlashMode(FlashMode.TORCH);
            mFlashView.setImageResource(R.drawable.btn_flash_torch);
         } else if (mContainer.getFlashMode() == FlashMode.TORCH) {
            mContainer.setFlashMode(FlashMode.ON);
            mFlashView.setImageResource(R.drawable.btn_flash_on);
         }
         break;
      case R.id.btn_switch_mode:
         //处理对 号的结果
         Intent intent = new Intent();
         intent.putExtra("photopath", photoPath);
         setResult(RESULT_OK, intent);
         
         mCameraShutterButton.setVisibility(View.GONE);
         mSwitchModeButton.setVisibility(View.GONE);
         mVideoIconView.setVisibility(View.GONE);
         mContainer.setVisibility(View.GONE);
         

         finish();
         break;
      case R.id.btn_switch_camera:
         //change to camera
         mContainer.switchCamera();
         break;
         
      default:
         break;
      }
   }

   
   
   //拍照后的回调
   @Override
   public void onTakePictureEnd(Bitmap thumBitmap) {
      mCameraShutterButton.setClickable(true);
   }

   @Override
   public void onAnimtionEnd(Bitmap bm, boolean isVideo) {
   }

   @Override
   public void onTakePictureEnd(String photoPath) {
      this.photoPath = photoPath;
      mContainer.setVisibility(View.GONE);
      mHeaderBar.setVisibility(View.GONE);
      iv_image.setVisibility(View.VISIBLE);
      mCameraShutterButton.setVisibility(View.GONE);
      mSwitchModeButton.setVisibility(View.VISIBLE);
      mVideoIconView.setVisibility(View.VISIBLE);
      iv_image.setImageURI(Uri.parse("file:///" + photoPath));
   }
}

原因:CameraContainer类里的摄像头在autoFocus之前没有开启预览

    try {
        mCameraView.getmCamera().startPreview(); // 拍照闪退,加上这句话就可以了
        mCameraView.onFocus(point, autoFocusCallback);
        mFocusImageView.startFocus(point);
     }catch (Exception e){
       e.printStackTrace();

猜你喜欢

转载自blog.csdn.net/sunshine_0707/article/details/82910572