- 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();
- }
- }
- }
- <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>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
- <?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>
来源: http://www.phpxs.com/code/1001769/