免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1780 | 回复: 0
打印 上一主题 下一主题

通用型手电筒 Android 代码 转发 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-17 09:38 |只看该作者 |倒序浏览
妈蛋,前几天广州番禺这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。
我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。
我发布到 google play 了
https://play.google.com/store/ap ... app.tool.flashlight
MainActivity.class
  1. public class MainActivity extends FragmentActivity {

  2.     @Override
  3.     protected void onCreate(Bundle savedInstanceState) {
  4.         super.onCreate(savedInstanceState);
  5.         setContentView(R.layout.activity_main);

  6.         if (isFlashSupported()) {
  7.             if (savedInstanceState == null) {
  8.                 getSupportFragmentManager().beginTransaction().add(R.id.container, new FlashlightFragment()).commit();
  9.             }
  10.         } else {
  11.             showNoFlashAlert();
  12.         }
  13.     }

  14.     private void showNoFlashAlert() {
  15.         new AlertDialog.Builder(this)
  16.                 .setMessage(R.string.device_not_support_msg)
  17.                 .setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.device_not_support_title)
  18.                 .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

  19.                     @Override
  20.                     public void onClick(DialogInterface dialog, int which) {
  21.                         dialog.dismiss();
  22.                         finish();
  23.                     }
  24.                 }).create().show();
  25.     }

  26.     private boolean isFlashSupported() {
  27.         PackageManager pm = getPackageManager();
  28.         return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
  29.     }

  30.     public static class FlashlightFragment extends Fragment implements SurfaceHolder.Callback {

  31.         public FlashlightFragment() { }

  32.         ImageButton btnSwitch;
  33.         ImageView bg;
  34.         private boolean isLighOn = false;

  35.         private Camera camera;
  36.         Camera.Parameters params;

  37.         @Override
  38.         public void onStart() {
  39.             super.onStart();
  40.             SurfaceView preview = (SurfaceView) getView().findViewById(R.id.PREVIEW);
  41.             SurfaceHolder mHolder = preview.getHolder();
  42.             mHolder.addCallback(this);
  43.         }

  44.         @Override
  45.         public void onPause() {
  46.             super.onPause();
  47.             turnOffFlash();
  48.         }

  49.         @Override
  50.         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  51.             View view = inflater.inflate(R.layout.fragment_main_activity, container, false);

  52.             // flash switch button
  53.             btnSwitch = (ImageButton) view.findViewById(R.id.flashlight_button);

  54.             bg = (ImageView) view.findViewById(R.id.flashlight_bg);

  55.             // displaying button image
  56.             toggleBgImage();

  57.             // Switch button click event to toggle flash on/off
  58.             btnSwitch.setOnClickListener(new View.OnClickListener() {

  59.                 @Override
  60.                 public void onClick(View v) {
  61.                     if (isLighOn) {
  62.                         turnOffFlash();
  63.                     } else {
  64.                         turnOnFlash();
  65.                     }
  66.                 }
  67.             });

  68.             return view;
  69.         }

  70.         // Turning On flash
  71.         private void turnOnFlash() {

  72.             if (!isLighOn) {
  73.                 if (camera == null || params == null) {
  74.                     return;
  75.                 }
  76.                 params = camera.getParameters();
  77.                 params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
  78.                 camera.setParameters(params);
  79.                 camera.startPreview();
  80.                 isLighOn = true;

  81.                 toggleBgImage();
  82.             }

  83.         }

  84.         // Turning Off flash
  85.         private void turnOffFlash() {

  86.             if (isLighOn) {
  87.                 if (camera == null || params == null) {
  88.                     return;
  89.                 }

  90.                 params = camera.getParameters();
  91.                 params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
  92.                 camera.setParameters(params);
  93.                 camera.stopPreview();
  94.                 isLighOn = false;

  95.                 toggleBgImage();
  96.             }
  97.         }

  98.         private void toggleBgImage() {
  99.             if (isLighOn) {
  100.                 bg.setImageResource(R.mipmap.f_on);
  101.             } else {
  102.                 bg.setImageResource(R.mipmap.f_off);
  103.             }
  104.         }

  105.         @Override
  106.         public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

  107.         }

  108.         @Override
  109.         public void surfaceDestroyed(SurfaceHolder holder) {
  110.             if (camera != null) {
  111.                 camera.stopPreview();
  112.                 camera.setPreviewCallback(null);
  113.                 camera.release();
  114.                 camera = null;
  115.             }
  116.         }

  117.         @Override
  118.         public void surfaceCreated(SurfaceHolder holder) {
  119.             if (camera == null) {
  120.                 camera = Camera.open();
  121.                 params = camera.getParameters();
  122.                 try {
  123.                     camera.setPreviewDisplay(holder);
  124.                 } catch (IOException e) {
  125.                     camera.release();
  126.                     camera = null;
  127.                 }
  128.             }

  129.             turnOnFlash();
  130.         }

  131.     }


  132. }
复制代码
fragment_main_activity.xml
  1. <RelativeLayout
  2.     xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     >

  6.     <SurfaceView
  7.         android:id="@+id/PREVIEW"
  8.         android:layout_width="1dp"
  9.         android:layout_height="1dp"/>

  10.     <ImageView
  11.         android:id="@+id/flashlight_bg"
  12.         android:layout_width="match_parent"
  13.         android:layout_height="match_parent"
  14.         android:src="@mipmap/f_on"
  15.         android:scaleType="centerCrop"
  16.         />

  17.     <ImageButton
  18.         android:id="@+id/flashlight_button"
  19.         android:layout_width="100dp"
  20.         android:layout_height="200dp"
  21.         android:layout_centerInParent="true"
  22.         android:background="@android:color/transparent"
  23.         android:text="fuck"/>

  24. </RelativeLayout>
复制代码
activity_main.xml
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.              android:id="@+id/container"
  3.              android:layout_width="match_parent"
  4.              android:layout_height="match_parent"
  5.              />
复制代码
AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.liujinghuiuncleapp.app.tool.flashlight" >

  4.     <uses-permission android:name="android.permission.CAMERA" />
  5.     <uses-permission android:name="android.permission.FLASHLIGHT" />

  6.     <uses-feature android:name="android.hardware.camera" />
  7.     <uses-feature android:name="android.hardware.camera.flash" />

  8.     <application
  9.         android:allowBackup="true"
  10.         android:icon="@mipmap/ic_launcher"
  11.         android:theme="@style/AppTheme"
  12.         android:label="@string/app_name" >
  13.         <activity
  14.             android:name=".MainActivity"
  15.             android:label="@string/app_name" >
  16.             <intent-filter>
  17.                 <action android:name="android.intent.action.MAIN" />

  18.                 <category android:name="android.intent.category.LAUNCHER" />
  19.             </intent-filter>
  20.         </activity>
  21.     </application>

  22. </manifest>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP