Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>The problem is solved with a Service. </p> <pre><code>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(); 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); } } public class CallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //device is ringing if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) { if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) { startFlashBlinkService(context); } } //call was answered or canceled else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE) || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { stopFlashBlinkService(context); } } //start flash blink light public void startFlashBlinkService(Context context) { if (!isBlinkServiceRunning(context)) { Intent iService = new Intent(context, FlashBlinkService.class); context.startService(iService); } } //stop flash blink light public void stopFlashBlinkService(Context context) { if (isBlinkServiceRunning(context)) { Intent iService = new Intent(context, FlashBlinkService.class); context.stopService(iService); } } //check if the blink service is running public boolean isBlinkServiceRunning(Context context) { ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if ("path.to.package.FlashBlinkService".equals(service.service.getClassName())) { return true; } } return false; } } </code></pre> <p>(:</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload