56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
# 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()
|