Capture image without user knowledge in android/Capture image as background service in android/Take photo without preview in android/ Camera without preview in android
package com.example.picture; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Service; import android.content.Context; import android.content.Intent; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.media.AudioManager; import android.os.IBinder; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class CameraService extends Service { //Camera variables //a surface holder private SurfaceHolder sHolder; //a variable to control the camera private Camera mCamera; //the camera parameters private Parameters parameters; /** Called when the activity is first created. */ @Override public void onCreate() { super.onCreate(); } @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); mCamera = Camera.open(); SurfaceView sv = new SurfaceView(getApplicationContext()); try { mCamera.setPreviewDisplay(sv.getHolder()); parameters = mCamera.getParameters(); //set camera parameters mCamera.setParameters(parameters); mCamera.startPreview(); mCamera.takePicture(null, null, mCall); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //Get a surface sHolder = sv.getHolder(); //tells Android that this surface will have its data constantly replaced sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } Camera.PictureCallback mCall = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { //decode the data obtained by the camera into a Bitmap FileOutputStream outStream = null; try{ outStream = new FileOutputStream("/sdcard/Image.jpg"); outStream.write(data); outStream.close(); } catch (FileNotFoundException e){ Log.d("CAMERA", e.getMessage()); } catch (IOException e){ Log.d("CAMERA", e.getMessage()); } } }; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } } |
It is not working..
ReplyDeleteNeither for me on Samsung Galaxy Tab 10.1 (originally with Android 3.2, upgraded to 4.0). Picture callback has never been called.
ReplyDeleteSuper!
ReplyDeleteThank you so much, really helped me!
NB
You might mention that you need to add the following in your manifest to get it to work:
... that is:
ReplyDeleteuses-permission
android.permission.CAMERA
and
android.permission.WRITE_EXTERNAL_STORAGE
event adding the permissions it is not working for me.. it showing error that application stopped unexpectedly..
ReplyDeletenot working above android 4.0. could you update it to make it work?
ReplyDeleteThis works.you must register your background service class in manifest.
ReplyDeletenot working
Deleteshow runtime exception camera.takepicture failed
great article but you forgot to add
ReplyDeletemCamera.release(); after closing the stream
to unlock the camera so that it can be used again :)