1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
# coding=utf-8
"""
Flash
-----
"""
from plyer.facades import Flash
from jnius import autoclass
from plyer.platforms.android import activity
Camera = autoclass("android.hardware.Camera")
CameraParameters = autoclass("android.hardware.Camera$Parameters")
SurfaceTexture = autoclass("android.graphics.SurfaceTexture")
PackageManager = autoclass('android.content.pm.PackageManager')
pm = activity.getPackageManager()
flash_available = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)
class AndroidFlash(Flash):
_camera = None
def _on(self):
if self._camera is None:
self._camera_open()
if not self._camera:
return
self._camera.setParameters(self._f_on)
def _off(self):
if not self._camera:
return
self._camera.setParameters(self._f_off)
def _release(self):
if not self._camera:
return
self._camera.stopPreview()
self._camera.release()
self._camera = None
def _camera_open(self):
if not flash_available:
return
self._camera = Camera.open()
self._f_on = Camera.getParameters()
self._f_off = Camera.getParameters()
self._f_on.setFlashMode(CameraParameters.FLASH_MODE_TORCH)
self._f_off.setFlashMode(CameraParameters.FLASH_MODE_OFF)
self._camera.startPreview()
# Need this for Nexus 5
self._camera.setPreviewTexture(SurfaceTexture(0))
def instance():
return AndroidFlash()
|