標籤:android 小米手電筒
手電筒功能實現簡單很實用,下面我們就來研究一下如何自製一款手電筒小程式,初學者可以通過執行個體瞭解原理,提高學習android技術的熱情和動力。
首先我們瞭解一下手電筒要調用哪些android許可權:
<!-- 開啟Camera的許可權 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.autofocus" /> <!-- 開啟閃光燈許可權 --> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
上面三個是網路攝影機許可權,下面兩個是閃光燈許可權,在本執行個體中都要配置一下。
下面看一下MainActivity.java:
package com.zxx1.light;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.Parameters;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.Toast;public class LightActivity extends Activity {private Button lightBtn = null;private Camera camera = null;private Parameters parameters = null;public static boolean isLight = true; // 定義開關狀態,狀態為false,開啟狀態,狀態為true,關閉狀態private int back = 0;// @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 全屏設定,隱藏視窗所有裝飾getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE); // 設定螢幕顯示無標題,必須啟動就要設定好,否則不能再次被設定getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//保持螢幕常亮setContentView(R.layout.main);lightBtn = (Button) findViewById(R.id.btn_light);lightBtn.setOnClickListener(new OnClickListenerImpl());}class OnClickListenerImpl implements OnClickListener {@Overridepublic void onClick(View v) {if (isLight) {lightBtn.setBackgroundResource(R.drawable.shou_on);// 設定不同圖片camera = Camera.open();// 開啟閃光燈parameters = camera.getParameters();parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);// 開啟camera.setParameters(parameters);camera.startPreview();// 開啟isLight = false;} else {lightBtn.setBackgroundResource(R.drawable.shou_off);parameters.setFlashMode(Parameters.FLASH_MODE_OFF);// 關閉camera.setParameters(parameters);camera.stopPreview();isLight = true;camera.release();}}}@Overrideprotected void onDestroy() {camera.release();super.onDestroy();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {back++;switch (back) {case 1:Toast.makeText(LightActivity.this, getString(R.string.again_exit), Toast.LENGTH_SHORT).show();break;case 2:back = 0;DulBack();break;}return true;} else {return super.onKeyDown(keyCode, event);}}public void DulBack() { // 關閉程式if (isLight) {// 開關關閉時LightActivity.this.finish();android.os.Process.killProcess(android.os.Process.myPid());// 關閉進程} else if (!isLight) {// 開關開啟時camera.release();LightActivity.this.finish();android.os.Process.killProcess(android.os.Process.myPid());// 關閉進程isLight = true;// 避免,開啟開關後退出程式,再次進入不開啟開關直接退出時,程式錯誤}}}
布局檔案如下:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/relativelayout" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/btn_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@drawable/shou_off" /></RelativeLayout>
最後別忘了配置許可權,最後運行執行個體如下:
喜歡的朋友關注我吧!謝謝。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android實戰簡易教程-第五十七槍(分享小米手電筒源碼)