Android: ¿Es posible tomar una foto con la cámara desde un servicio sin UI

El único código que he podido conseguir trabajando para tomar una foto con la cámara funciona de una actividad. Estoy bastante seguro de que es posible tomar una foto de dentro de un servicio, o de un AsyncTask lanzado por el servicio.

Me parece que la API de la cámara necesita un SurfaceView que debe estar atado a una interfaz de usuario. Tal vez yo estoy equivocado. ¿Alguien ha escrito código en el que se puede tomar una foto de un servicio?

3 Solutions collect form web for “Android: ¿Es posible tomar una foto con la cámara desde un servicio sin UI”

No creo que esto sea posible ya que la cámara necesita una pantalla de vista previa. Vea la pregunta similar aquí

Es posible mediante WindowManager en Android.

https://stackoverflow.com/a/10268650/3047840

Debo decir que sí que necesita SurfaceView para tomar una foto, pero no tiene que estar atado a un cierto formato xml. Puede agregarla a la clase WindowManager que funciona incluso en el servicio. Así que el WindowManager aquí abre una "ventana" para hacer cualquier efecto flotante en Android.

Específicamente,

Puede agregar un SurfaceView al WindowManager y establecer los parámetros como sigue.

 mPreview = new CameraPreview(this, mCamera, jpegCallback); WindowManager wm = (WindowManager) this .getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSPARENT); params.height = 1; params.width = 1; wm.addView(mPreview, params); 

Android tiene esta funcionalidad, mientras que iOS no. Esta es la razón por la que puede tener Facebook chathead activo en la pantalla de inicio en Android en lugar de iOS.

Mostrar facebook como la cabeza de conversación de un receptor de difusión en android

He aquí un código más completo si todavía estás buscando. Funciona en un servicio (probado):

 private void takePhoto() { System.out.println( "Preparing to take photo"); Camera camera = null; int cameraCount = 0; Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); cameraCount = Camera.getNumberOfCameras(); for (int camIdx = 0; camIdx < cameraCount; camIdx++) { SystemClock.sleep(1000); Camera.getCameraInfo(camIdx, cameraInfo); try { camera = Camera.open(camIdx); } catch (RuntimeException e) { System.out.println("Camera not available: " + camIdx); camera = null; //e.printStackTrace(); } try{ if (null == camera) { System.out.println("Could not get camera instance"); }else{ System.out.println("Got the camera, creating the dummy surface texture"); //SurfaceTexture dummySurfaceTextureF = new SurfaceTexture(0); try { //camera.setPreviewTexture(dummySurfaceTextureF); camera.setPreviewTexture(new SurfaceTexture(0)); camera.startPreview(); } catch (Exception e) { System.out.println("Could not set the surface preview texture"); e.printStackTrace(); } camera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File pictureFileDir = getDir(); if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) { return; } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss"); String date = dateFormat.format(new Date()); String photoFile = "PictureFront_" + "_" + date + ".jpg"; String filename = pictureFileDir.getPath() + File.separator + photoFile; File mainPicture = new File(filename); addImageFile(mainPicture); try { FileOutputStream fos = new FileOutputStream(mainPicture); fos.write(data); fos.close(); System.out.println("image saved"); } catch (Exception error) { System.out.println("Image could not be saved"); } camera.release(); } }); } }catch (Exception e){ camera.release(); } } 
  • Android: ¿Cómo guardar un marco de vista previa como imagen jpeg?
  • Tratando de guardar la imagen en una carpeta de imágenes determinada que no se ha creado
  • La cámara de Android tiene una imagen de múltiples bugs para algunos usuarios
  • La cámara de Android no vuelve a mi aplicación cuando se ha tomado una fotografía
  • cámara de encargo del androide estirada surfaceview
  • Android: el zoom no efectúa los datos del marco de vista previa pasados ​​a onPreviewFrame ()
  • Conversión de YUV a RGB por fragment shader
  • Cómo comprimir el tamaño de la imagen?
  • Cómo obtener la distancia a un objeto y el tamaño del objeto utilizando la cámara (dispositivo Android)?
  • La superficie de vista previa no válida de grabación de vídeo android
  • Error de la cámara 100
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.