This Android
app creates a Toggle button that turns the light on the Android smartphone ON
and OFF.
In addition,
you can switch to Pulse Strobo, where the HIGH pulse and LOW pulses are
displayed as flashes in the mobile phone camera
with Java
Code in Android
Java Code
In java/project
MainActivity.java
package com.example.flashimpulser;
import androidx.appcompat.app.AppCompatActivity;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.ToggleButton;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
//--< Variables
for Flash >--
boolean _isFlashAvailable;
CameraManager _CameraManager;
String _CameraId;
boolean _flashIsOn = false;
//--</ Variables
for Flash >--
Switch _switchImpuler;
ToggleButton _toggleButton;
int _milliSeconds_HIGH =1000;
int _milliSedonds_LOW =1000;
//========<
#region: Activity >========
@Override
protected void onCreate(Bundle savedInstanceState)
{
//--------<
onCreate() >--------
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//----< init
>----
_switchImpuler=findViewById(R.id.switchFlasher);
_toggleButton= findViewById(R.id.btnToggleLight);
//---< SeekBars
>---
SeekBar seekbarHIGH =findViewById(R.id.seekBarHIGH);
_milliSeconds_HIGH =seekbarHIGH.getMax();
seekbarHIGH.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
_milliSeconds_HIGH =i;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
SeekBar seekbarLOW =findViewById(R.id.seekBarLOW);
_milliSedonds_LOW =seekbarLOW.getMax();
seekbarLOW.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
_milliSedonds_LOW =i;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
//---< SeekBars
>---
//-< FlashLight >-
//*flashlight is part of camera
_isFlashAvailable =
getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
_CameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
try {
_CameraId = _CameraManager.getCameraIdList()[0];
} catch (CameraAccessException e) {
//e.printStackTrace();
}
//-</ FlashLight
>-
//----</ init >----
//--------</ onCreate()
>--------
}
//========</
#region: Activity >========
//========< #region:
Buttons+Views >========
public void btnToggleLight(View view) {
//--------< btnToggleLight()
>--------
flashLightMain();
//--------</
btnToggleLight() >--------
}
public void switchImpulses(View view) {
flashLightMain();
}
//========</
#region: Buttons+Views >========
//========< #region: Methods
>========
private void flashLightMain(){
//--------<
flashLightMain() >--------
if (_toggleButton.isChecked() ==true) {
//----<
Button==ON >----
if (_switchImpuler.isChecked())
{
//--< Impulses
>--
start_flash_Impule_HIGH();
//--</ Impulses
>--
}
else
{
//--< Full >--
setFlashLightON();
//--</ Full
>--
}
//----</
Button==ON >----
}
else
{
//----<
Button==OFF >----
setFlashLightOFF();
set_FlashImpulses_OFF();
//----</
Button==OFF >----
}
//--------</
flashLightMain() >--------
}
private void setFlashLightON() {
//--------<
setFlashLightON() >--------
//*switch Flash Light ON / OFF
try {
_flashIsOn = true;
_CameraManager.setTorchMode(_CameraId, true);
} catch (CameraAccessException e) {
e.printStackTrace();
}
//--------</
setFlashLightON() >--------
}
private void setFlashLightOFF() {
//--------<
flashLightON() >--------
//*switch Flash Light ON / OFF
try {
_flashIsOn = false;
_CameraManager.setTorchMode(_CameraId, false);
} catch (CameraAccessException e) {
e.printStackTrace();
}
//--------</ flashLightON()
>--------
}
public void start_flash_Impule_HIGH()
{
//----<
start_flash_Impule_HIGH() >----
//< check >
if (!_toggleButton.isChecked()) return;
if (!_switchImpuler.isChecked()) return;
Timer _timerPulsHIGH = new Timer();
_timerPulsHIGH.schedule(new TimerTask() {
@Override
public void run()
{
try {
_flashIsOn = true;
_CameraManager.setTorchMode(_CameraId, true);
start_flash_Impule_LOW();
}
catch (CameraAccessException e) {
e.printStackTrace();
}
}
}, _milliSedonds_LOW);
//----</
Pstart_flash_Impule_HIGH() >--
}
public void start_flash_Impule_LOW()
{
//----<
start_flash_Impule_LOW() >----
Timer _timerPulsLOW = new Timer();
_timerPulsLOW.schedule(new TimerTask() {
@Override
public void run()
{
try {
_flashIsOn = false;
_CameraManager.setTorchMode(_CameraId, false);
start_flash_Impule_HIGH();
}
catch (CameraAccessException e) {
e.printStackTrace();
}
}
}, _milliSeconds_HIGH);
//----</
start_flash_Impule_LOW() >--
}
private void set_FlashImpulses_OFF()
{
//--------<
set_FlashImpulses_OFF() >--------
//--< Flashlight OFF >--
try {
_CameraManager.setTorchMode(_CameraId, false);
_flashIsOn = false;
} catch (CameraAccessException e) {
e.printStackTrace();
}
//--</ Flashlight
OFF >--
//--------</
set_FlashImpulses_OFF() >--------
}
//========</
#region: Methods >========
}
|
Layout:
Activity_main.xml
In res/layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="44sp"
>
<ToggleButton
android:id="@+id/btnToggleLight"
android:layout_width="200sp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="btnToggleLight"
/>
<Switch
android:id="@+id/switchFlasher"
android:layout_height="wrap_content"
android:layout_width="200sp"
android:layout_gravity="center_horizontal"
android:layout_margin="10sp"
android:text="@string/text_SwitchStrobo"
android:onClick="switchImpulses"
android:layout_marginBottom="44sp"
tools:ignore="UseSwitchCompatOrMaterialXml"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/text_Slider_high"
android:textSize="16sp"
android:layout_marginTop="33dp"
/>
<SeekBar
android:id="@+id/seekBarHIGH"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:progress="1000"
android:max="1000"
/>
<TextView
android:layout_marginTop="11dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/text_Slider_low"
android:textSize="16sp"
/>
<SeekBar
android:id="@+id/seekBarLOW"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:progress="1000"
android:max="1000"
/>
</LinearLayout>
|
AndroidManifest.xml
In the
Android manifest noch the entry must be made that FlashLight is allowed
<uses-permission android:name="android.permission.FLASHLIGHT"/>
|