我有发出闪烁信号的服务:
public class FlashBlinkService extends Service
{
private static Camera cam = null;
private Handler handler = new Handler();
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
super.onCreate();
startFlashBlink();
}
//for simulating flash blink
Runnable flashBlinkRunnable = new Runnable()
{
public void run()
{
cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
p.setFlashMode(Parameters.FLASH_MODE_OFF);
cam.setParameters(p);
cam.stopPreview();
cam.release();
cam = null;
//--->
handler.post(flashBlinkRunnable);
}
};
//start flash blink light
public void startFlashBlink()
{
flashBlinkRunnable.run();
}
//stop flash blink light
public void stopFlashBlink()
{
handler.removeCallbacks(flashBlinkRunnable);
stopCamera(cam);
}
//stop camera
private void stopCamera(Camera cam)
{
if (cam != null)
{
cam.stopPreview();
cam.release();
cam = null;
}
}
@Override
public void onDestroy()
{
super.onDestroy();
handler.removeCallbacks(flashBlinkRunnable);
stopCamera(cam);
}
}
这是目前对我来说“最快”的闪光灯闪烁解决方案。哪个是制作更快或更慢的闪光闪烁信号的最佳方法?市场上有很多应用程序(如一些手电筒)提供此选项。谢谢。
最佳答案
我已经通过以下方式实现了这一点。频闪(闪光灯闪烁)的频率由 Thread.sleep() 函数中的 sleepMS 变量调节。例如,如果您想要以 10 Hz 的频率闪烁 10 次,您可以设置
sleepMS=(1/10)*50;
flashCount=10;
或者更一般的:
sleepMS=(1/Hz)*1000/2
不确定是否是实现此目的的最佳方式,但它确实有效。
Camera cam;
Parameters params;
private void main(){
cam = Camera.open();
params = cam.getParameters();
cam.setPreviewTexture(new SurfaceTexture(0));
cam.startPreview();
for (int i = 0; i < flashCount; i++) {
flipFlash();
Thread.sleep(sleepMS);
flipFlash();
Thread.sleep(sleepMS);
}
cam.stopPreview();
cam.release();
}
private void flipFlash(){
if (isLighOn) {
params.setFlashMode(Parameters.FLASH_MODE_OFF);
cam.setParameters(params);
isLighOn = false;
} else{
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(params);
isLighOn = true;
}
}
关于android - 如何在 Android 中创建快速或慢速相机闪光灯闪烁信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064391/