Welcome

首页 / 移动开发 / Android / Android 通用型手电筒代码

前几天这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。
我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。
MainActivity.class
public class MainActivity extends FragmentActivity { @Overrideprotected 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() { @Overridepublic 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; @Overridepublic void onStart() {super.onStart();SurfaceView preview = (SurfaceView) getView().findViewById(R.id.PREVIEW);SurfaceHolder mHolder = preview.getHolder();mHolder.addCallback(this);} @Overridepublic void onPause() {super.onPause();turnOffFlash();} @Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_main_activity, container, false); // flash switch buttonbtnSwitch = (ImageButton) view.findViewById(R.id.flashlight_button); bg = (ImageView) view.findViewById(R.id.flashlight_bg); // displaying button imagetoggleBgImage(); // Switch button click event to toggle flash on/offbtnSwitch.setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View v) {if (isLighOn) {turnOffFlash();} else {turnOnFlash();}}}); return view;} // Turning On flashprivate 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 flashprivate 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);}} @Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Overridepublic void surfaceDestroyed(SurfaceHolder holder) {if (camera != null) {camera.stopPreview();camera.setPreviewCallback(null);camera.release();camera = null;}} @Overridepublic 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
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"> <SurfaceViewandroid:id="@+id/PREVIEW"android:layout_width="1dp"android:layout_height="1dp"/> <ImageViewandroid:id="@+id/flashlight_bg"android:layout_width="match_parent"android:layout_height="match_parent"android:src="@mipmap/f_on"android:scaleType="centerCrop"/> <ImageButtonandroid: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" /> <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:theme="@style/AppTheme"android:label="@string/app_name" ><activityandroid: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>
以上所述就是本文的全部内容了,希望大家能够喜欢。