My Application Work Perfect But When My Camera Appliaction When Start And Close Then Again Start Then.
java.lang.RuntimeException: Fail to connect to camera service
This Error Generate Plz Any Body Help Me.
Thanks For Advance…
Code
`
CameraActivity.java
package com.drc.camera;
public class CameraActivity extends Activity {
private static final String TAG = "CameraDemo";
CameraPreview mCameraPreview=null;
FrameLayout mFrameLayout;
Button btntakephoto,btnresetphoto;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.xcamera);
mFrameLayout=(FrameLayout)findViewById(R.id.framepreview);
btntakephoto = (Button) findViewById(R.id.btntakephoto);
btnresetphoto = (Button) findViewById(R.id.btnresetphoto);
mCameraPreview = new CameraPreview(this);
mFrameLayout.addView(mCameraPreview);
btnresetphoto.setEnabled(false);
btntakephoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mCameraPreview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
btnresetphoto.setEnabled(true);
}
});
btnresetphoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mCameraPreview.camera.startPreview();
btnresetphoto.setEnabled(false);
Toast.makeText(CameraActivity.this,"Start Camera", Toast.LENGTH_SHORT).show();
}
});
Log.d(TAG, "onCreate'd");
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d(TAG, "onShutter'd");
}
};
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken - raw");
}
};
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format("/sdcard/%d.jpg",System.currentTimeMillis()));
outStream.write(data);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
}
`
`
CameraPreview.java
package com.drc.camera;
import java.io.IOException;
class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "Preview";
SurfaceHolder mHolder;
public Camera camera;
CameraPreview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d(TAG, "onPreviewFrame called at: " + System.currentTimeMillis());
CameraPreview.this.invalidate();
}
});
}
catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Paint p = new Paint(Color.RED);
Log.d(TAG, "draw");
canvas.drawText("PREVIEW", canvas.getWidth() / 2,canvas.getHeight() / 2, p);
}
}
`
AndroidManifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".CameraActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera"></uses-feature>
Make sure you call camera.release() in onPause(), not just set it to null. It’s permissible for an application to keep the camera running while not in the foreground (for example, so you can keep using video chat while you check something in a different application).
This means you have to clean up after yourself once you’re done using the camera, and call release(). Until you do, or at least before GC cleans up or your application process is killed, no other app can access the camera.