Android Universal Flashlight code
- 2020-06-23 01:54:08
- OfStack
A few days ago here 1 small area power cut, black hemp of, 1 cat burst into bedroom, frighten me cry, then write a flashlight decisively, next time power cut, come again, I want to frighten dead it.
I've seen a lot of people call the flash directly, but most models don't support it, and I've done this with the camera, most models do.
MainActivity.class
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (isFlashSupported()) {
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.container, new FlashlightFragment()).commit();
}
} else {
showNoFlashAlert();
}
}
private void showNoFlashAlert() {
new AlertDialog.Builder(this)
.setMessage(R.string.device_not_support_msg)
.setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.device_not_support_title)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).create().show();
}
private boolean isFlashSupported() {
PackageManager pm = getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
public static class FlashlightFragment extends Fragment implements SurfaceHolder.Callback {
public FlashlightFragment() { }
ImageButton btnSwitch;
ImageView bg;
private boolean isLighOn = false;
private Camera camera;
Camera.Parameters params;
@Override
public void onStart() {
super.onStart();
SurfaceView preview = (SurfaceView) getView().findViewById(R.id.PREVIEW);
SurfaceHolder mHolder = preview.getHolder();
mHolder.addCallback(this);
}
@Override
public void onPause() {
super.onPause();
turnOffFlash();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main_activity, container, false);
// flash switch button
btnSwitch = (ImageButton) view.findViewById(R.id.flashlight_button);
bg = (ImageView) view.findViewById(R.id.flashlight_bg);
// displaying button image
toggleBgImage();
// Switch button click event to toggle flash on/off
btnSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isLighOn) {
turnOffFlash();
} else {
turnOnFlash();
}
}
});
return view;
}
// Turning On flash
private void turnOnFlash() {
if (!isLighOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isLighOn = true;
toggleBgImage();
}
}
// Turning Off flash
private void turnOffFlash() {
if (isLighOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isLighOn = false;
toggleBgImage();
}
}
private void toggleBgImage() {
if (isLighOn) {
bg.setImageResource(R.mipmap.f_on);
} else {
bg.setImageResource(R.mipmap.f_off);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (camera == null) {
camera = Camera.open();
params = camera.getParameters();
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
camera.release();
camera = null;
}
}
turnOnFlash();
}
}
}
fragment_main_activity.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<SurfaceView
android:id="@+id/PREVIEW"
android:layout_width="1dp"
android:layout_height="1dp"/>
<ImageView
android:id="@+id/flashlight_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/f_on"
android:scaleType="centerCrop"
/>
<ImageButton
android:id="@+id/flashlight_button"
android:layout_width="100dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:background="@android:color/transparent"
android:text="fuck"/>
</RelativeLayout>
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liujinghuiuncleapp.app.tool.flashlight" >
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.flash" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
This is the end of this article, I hope you enjoy it.