我的问题是: 拍照后相机预览不会停止,它仍处于预览模式。这只发生在带有android 4.4的Samsung S3上。在其他设备上它可以工作。
你能帮助我吗?
这是我的代码:
public static class PlaceholderFragment extends Fragment {
private CameraPreview mCameraPreview;
private boolean pozeaza=false;
View rootView;
public PlaceholderFragment() {
}
LinearLayout preview;
boolean isPreviewRunning;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_dvcamera_retake,
container, false);
// mCamera = getCameraInstance();
// initializeCamera(mCamera);
//mCameraPreview = new CameraPreview(this.getActivity(), mCamera);
final TextView mTextField = (TextView) rootView
.findViewById(R.id.textView1);
preview = (LinearLayout) rootView
.findViewById(R.id.camera_preview);
bt1 = (Button) rootView.findViewById(R.id.button1);
bt2 = (Button) rootView.findViewById(R.id.button2);
bt3 = (Button) rootView.findViewById(R.id.button3);
bt4 = (Button) rootView.findViewById(R.id.button4);
bt3.setVisibility(View.GONE);
bt4.setVisibility(View.GONE);
// if (preview != null) {
// preview.addView(mCameraPreview);
// }
Button button = (Button) rootView.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!pozeaza)
{
pozeaza=true;
mCamera.setPreviewCallback(null);
mCamera.takePicture(null, null, mPicture);
}
}
});
Button button1 = (Button) rootView.findViewById(R.id.button2);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Activity ac = (Activity) ct;
ac.finish();
Intent intent = new Intent(ac, MainActivity1.class);
intent.putExtra("key", key);
intent.putExtra("cardID", cardID);
ac.startActivity(intent);
}
});
bt3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*Activity ac = (Activity) ct;
ac.finish();
Intent intent = new Intent(ac, DVCameraActivitySnapSite.class);
ac.startActivity(intent);*/
bt3.setVisibility(View.GONE);
bt4.setVisibility(View.GONE);
bt1.setVisibility(View.VISIBLE);
bt2.setVisibility(View.VISIBLE);
mCamera.startPreview();
}
});
bt4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
progressTask().execute("");
Activity ac = (Activity) ct;
ac.finish();
Intent intent = new Intent(ac, MainActivity1.class);
intent.putExtra("result", 2);
ac.startActivity(intent);
}
});
// int msec = (Integer.parseInt(config.getSnapDelay()))*1000;
return rootView;
}
private Camera getCameraInstance() {
Camera camera = null;
int cameraCount = 0;
try {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
if(camO==1)
for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo );
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) {
try {
camera = Camera.open( camIdx );
} catch (RuntimeException e) {
}
}
}
else
for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo );
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK ) {
try {
camera = Camera.open( camIdx );
} catch (RuntimeException e) {
}
}
}
//camera = Camera.open();
// camera.setDisplayOrientation(90);
//Parameters parameters = camera.getParameters();
//parameters.set("jpeg-quality", 70);
// parameters.setPictureFormat(PixelFormat.JPEG);
// parameters.setPictureSize(480, 640);
// camera.setParameters(parameters);
} catch (Exception e) {
// cannot get camera or does not exist
}
return camera;
}
protected void initializeCamera(Camera mCamera) {
isPreviewRunning=true;
mCameraPreview = new CameraPreview(this.getActivity(), mCamera);
preview = (LinearLayout) rootView
.findViewById(R.id.camera_preview);
if (preview != null) {
preview.addView(mCameraPreview);
}
}
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Release the Camera because we don't need it when paused
// and other activities might need to use it.
if(mCamera!=null){
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCameraPreview.getHolder().removeCallback(mCameraPreview);
preview.removeView(mCameraPreview);
mCamera.release();
mCamera = null;
}
}
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
// Get the Camera instance as the activity achieves full user focus
/* if (mCamera == null) {
mCameraPreview = new CameraPreview(this.getActivity(), mCamera);
preview = (LinearLayout) rootView
.findViewById(R.id.camera_preview);
if (preview != null) {
preview.addView(mCameraPreview);
}
// initializeCamera(); // Local method to handle camera init
}*/
// mCamera.setPreviewCallback(null);
//if (mCamera==null){
mCamera=getCameraInstance();
//}
initializeCamera(mCamera);
}
PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
pozeaza=false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
String yourText = sdf.format(Calendar.getInstance().getTime());
File store = Environment.getExternalStorageDirectory();
dateTaken=yourText;
filename1=comp +"_" +yourText+".jpg";
path = store.getAbsolutePath()
+ "/com.wyseos.virtualclock/" + comp +"_" +yourText+".jpg";
pictureFile = new File(path);
try {
dataBit=data;
// BitmapFactory.Options options = new
// BitmapFactory.Options();
// options.inPreferredConfig = Bitmap.Config.ARGB_8888;
// Bitmap bitmap = BitmapFactory.decodeFile(path, options);
// timestampItAndSave(bitmap);
// camera.release();
bt1.setVisibility(View.GONE);
//bt2.setVisibility(View.GONE);
bt3.setVisibility(View.VISIBLE);
bt4.setVisibility(View.VISIBLE);
//progressTask().execute("");
//Activity ac = (Activity) ct;
//ac.finish();
//Intent intent = new Intent(ac, MainActivity1.class);
//ac.startActivity(intent);
rotation=getRotation(getActivity());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}