Android 通用型手电筒代码

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

用相机功能来实现的,大部分机型都支持。
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>