【问题标题】:How to release camera after activity ends in Android?活动结束后如何在Android中释放相机?
【发布时间】:2013-05-23 04:04:46
【问题描述】:

我正在开发一个需要扫描 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.
    }
}

【问题讨论】:

    标签: android android-camera


    【解决方案1】:

    将以下代码放入您的活动的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;
            }
    
        }
    

    【讨论】:

    • 如果我只是将意图传递给相机和扫描应用程序怎么办?那我该怎么做呢?
    • 请在你的Activity的onPause方法里做,最好放在那里。
    • 相机是相机的对象。
    • 请查看我的代码并告诉我当我直接传递意图时我可以在哪里为相机创建一个对象?一些代码将非常有用。
    • protected void onDestroy
    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 2016-06-13
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多