如何在Android中在活动结束后释放相机?

7

我正在开发一个需要扫描QR码并拍照的应用程序,但有时候相机应用会崩溃,并显示Android相机已停止工作,需要重新启动设备才能正常运行。

我希望能够从我的活动中释放相机,以避免在任何情况下后续崩溃。需要帮助!

扫描代码:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    try{
       Intent intent = new Intent("com.google.zxing.client.android.SCAN");
       intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
       startActivityForResult(intent, 0);
    }catch(Exception e){
         // ERROR
    }
} //End of onCreate

public void onActivityResult(int requestCode, int resultCode, Intent intent){
   if (requestCode == 0){
      if (resultCode == RESULT_OK){
         String contents = intent.getStringExtra("SCAN_RESULT");
         showPass(contents);
      }
      else if (resultCode == RESULT_CANCELED){
         showFail();
      } 
   } // End of If
} //End of onActivityResult

点击图片的代码:

public void takephoto(View v){
     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
     startActivityForResult(cameraIntent, CAMERA_REQUEST);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == CAMERA_REQUEST){
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        //some action.
    }
}
1个回答

17

将以下代码放入您的活动的onDestroy方法中:

protected void onDestroy(){

if(camera!=null){
            camera.stopPreview();
            camera.setPreviewCallback(null);

            camera.release();
            camera = null;
        }


}
如果您正在使用单独的Preview类,则请添加以下代码:

如果您使用分离的预览类,请添加以下代码:

public void surfaceDestroyed(SurfaceHolder holder) {

        if(camera!=null){
            camera.stopPreview();
            camera.setPreviewCallback(null);

            camera.release();
            camera = null;
        }

    }

如果我只是将一个意图传递给相机和扫描应用程序,那我该怎么做呢?如何做到这一点? - Garima Tiwari
6
请在您的Activity的onPause方法中执行此操作,最好在那里释放它。 - nikhil.thakkar
1
相机是Camera的对象。 - Sagar Maiyad
请查看我的代码并告诉我在我直接传递intent时在哪里可以创建相机对象?一些代码会非常有用。 - Garima Tiwari
protected void onDestroy - kchoi
@Riser 为什么你提到将发布代码放在预览类中而不是活动中? - Vasile Doe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接