Android 通用型手电筒代码

发布时间:2017-04-14 06:02 来源:互联网 当前栏目:电脑编程入门

   说到手机手电筒功能,很多人都是直接调用闪光灯,而本文给大家介绍的是用相机功能来实现的,有需要的小伙伴可以参考下。

  前几天这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。

  我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。

  MainActivity.class

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 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(); }   }     }
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、