在本文中,我們將介紹如何創(chuàng)建Android免費(fèi)手電筒應(yīng)用程序慌洪。此教程是“Learn By Doing”教程系列的一部分顶燕,在這里我們將向你展示如何創(chuàng)建簡單的Android app。這將會幫助Android開發(fā)新手增加經(jīng)驗(yàn)冈爹。在學(xué)習(xí)了本教程之后涌攻,你就可以為Android手機(jī)創(chuàng)建最好的手電筒app,并通過Google play散播開來频伤。
要下載完整的源代碼恳谎,請?jiān)L問以下鏈接,并在點(diǎn)擊Download Now按鈕來下載app apk憋肖,請?jiān)L問以下鏈接并點(diǎn)擊Download?APK按鈕:
使用Camera2 API的Android手電筒應(yīng)用程序教程
我們希望你已經(jīng)安裝了Android Studio因痛。如果還沒有陨瘩,那么按照教程安裝Android?Studio梦湘,然后再回到這里袁余。也可以在閱讀本教程之前晌杰,建議你先做一個簡單的Hello Worldapp悼做,并在智能手機(jī)上運(yùn)行谭期。你可以學(xué)習(xí)如何連接呵晚,如何在實(shí)體Android設(shè)備上配置應(yīng)用壶栋,以及如何通過Android Studio運(yùn)行HelloWorld程序。好了赞咙,現(xiàn)在讓我們開始創(chuàng)建我們的LED手電筒應(yīng)用程序吧责循。首先通過如下方式在Android Studio中創(chuàng)建一個新項(xiàng)目。
創(chuàng)建新項(xiàng)目
請按照下列步驟做:
打開Android Studio攀操,通過File => New => New Project創(chuàng)建一個新項(xiàng)目院仿。輸入應(yīng)用程序名稱為LedFlashLight和你公司的域名。(我們使用的是我們公司的域名速和,即 androidtutorialpoint.com歹垫。同樣,你可以使用你公司的颠放。)
點(diǎn)擊Next排惨,選擇Minimum SDK。保持默認(rèn)設(shè)置碰凶,然后單擊Next暮芭。
選擇Empty Activity,然后單擊Next欲低。
在接下來的屏幕中辕宏,輸入Empty Activity為FlashLightActivity,不要忘記查看Generate Layout Button按鈕砾莱,然后單擊Finish瑞筐。
Gradle會同步項(xiàng)目和解決所有的依賴。
添加權(quán)限使用Camera和FlashLight
打開AndroidManifest.xml文件并添加以下權(quán)限:
這些uses-permissions標(biāo)簽告訴Android操作系統(tǒng)恤磷,我們的app需要訪問CAMERA和FLASHLIGHT面哼。同樣uses-feature告訴了在app中將使用什么功能。
LED Flash Light應(yīng)用程序只能在人像模式下工作扫步,因此添加下面的代碼到activity標(biāo)簽。
android:screenOrientation="portrait"
完整的AndroidManifest.xml如下:
AnroidManifest.xml
除了軟件包的名稱匈子,其他一切應(yīng)該都和你的一樣河胎。
生成應(yīng)用程序布局
打開activity_flash_light.xml并添加以下代碼:
我們正在使用ImageButton。當(dāng)用戶按下此按鈕時虎敦,LED手電筒將被切換游岳。
如果你還是Android開發(fā)新手,那么可以通過下面的教程來了解更多關(guān)于Android布局的基礎(chǔ)其徙。
添加功能
打開FlashLightActivity.java并聲明下列變量胚迫。
FlashLightActivity.java
package com.androidtutorialpoint.ledflashlight;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.content.pm.PackageManager;importandroid.hardware.camera2.CameraAccessException;importandroid.hardware.camera2.CameraManager;importandroid.media.MediaPlayer;importandroid.os.Build;importandroid.os.Bundle;importandroid.support.v7.app.AlertDialog;importandroid.support.v7.app.AppCompatActivity;importandroid.util.Log;importandroid.view.View;importandroid.widget.ImageButton;publicclassFlashLightActivityextendsAppCompatActivity{privateCameraManagermCameraManager;privateStringmCameraId;privateImageButtonmTorchOnOffButton;privateBooleanisTorchOn;privateMediaPlayermp;? ? @Overrideprotected void onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);Log.d("FlashLightActivity","onCreate()");? ? ? ? setContentView(R.layout.activity_flash_light);? ? ? ? mTorchOnOffButton = (ImageButton) findViewById(R.id.button_on_off);? ? ? ? isTorchOn =false;
在這里,我們只聲明變量唾那,并在onCreate()方法中設(shè)置活動布局访锻。我們還從布局中引用了mTorchOnOffButton Button。后面我們會再具體談一談。這是我們將使用Camera2API期犬,因?yàn)镃amera?API在Android中現(xiàn)在已經(jīng)過時了河哑。
我們需要檢測設(shè)備是否具有手電筒。萬一設(shè)備不支持手電筒龟虎,那么我們需要用警報消息來提醒用戶璃谨。
添加下面的代碼在上面的FlashActivity活動代碼的下面。
FlashLightActivity
Boolean isFlashAvailable = getApplicationContext().getPackageManager()? ? ? ? ? ? ? ? .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);if(!isFlashAvailable) {? ? ? ? ? ? AlertDialog alert =newAlertDialog.Builder(FlashLightActivity.this)? ? ? ? ? ? ? ? ? ? .create();? ? ? ? ? ? alert.setTitle("Error !!");? ? ? ? ? ? alert.setMessage("Your device doesn't support flash light!");? ? ? ? ? ? alert.setButton(DialogInterface.BUTTON_POSITIVE,"OK",newDialogInterface.OnClickListener() {publicvoidonClick(DialogInterface dialog,intwhich){// closing the applicationfinish();? ? ? ? ? ? ? ? ? ? System.exit(0);? ? ? ? ? ? ? ? }? ? ? ? ? ? });? ? ? ? ? ? alert.show();return;? ? ? ? }
如果你的手機(jī)不支持相機(jī)閃光燈鲤妥,那么你會得到以下錯誤佳吞。
按下OK按鈕,應(yīng)用程序會關(guān)閉棉安。
接下來容达,我們把代碼添加到onCreate()方法以獲得CameraManager對象。然后垂券,我們設(shè)置OnClickListener()來開/關(guān)LED手電筒應(yīng)用的按鈕花盐。
在OnClickListener()中,我們檢查手電筒當(dāng)前是開啟還是關(guān)閉的菇爪,然后我們調(diào)用turnOffFlashLight()來關(guān)閉閃光燈算芯,在手電筒已經(jīng)開啟的情況下,以及調(diào)用turnOnFlashLight()來開啟閃光燈凳宙,在手電筒當(dāng)前是關(guān)閉的情況下熙揍。
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);try{? ? ? ? ? ? mCameraId = mCameraManager.getCameraIdList()[0];? ? ? ? }catch(CameraAccessException e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? }? ? ? ? mTorchOnOffButton.setOnClickListener(newView.OnClickListener() {@OverridepublicvoidonClick(View v){try{if(isTorchOn) {? ? ? ? ? ? ? ? ? ? ? ? turnOffFlashLight();? ? ? ? ? ? ? ? ? ? ? ? isTorchOn =false;? ? ? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? ? ? turnOnFlashLight();? ? ? ? ? ? ? ? ? ? ? ? isTorchOn =true;? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? }catch(Exception e) {? ? ? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? });? ? }
接下來,我們要添加turnOffFlashLight()和turnOnFlashLight()方法分別用于關(guān)閉和開啟閃光燈氏涩。我們還要添加一個方法playOnOffSound給一個點(diǎn)擊按鈕的聲音效果届囚。
publicvoidturnOnFlashLight(){try{if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {? ? ? ? ? ? ? ? mCameraManager.setTorchMode(mCameraId,true);? ? ? ? ? ? ? ? playOnOffSound();? ? ? ? ? ? ? ? mTorchOnOffButton.setImageResource(R.drawable.on);? ? ? ? ? ? }? ? ? ? }catch(Exception e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? }? ? }publicvoidturnOffFlashLight(){try{if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {? ? ? ? ? ? ? ? mCameraManager.setTorchMode(mCameraId,false);? ? ? ? ? ? ? ? playOnOffSound();? ? ? ? ? ? ? ? mTorchOnOffButton.setImageResource(R.drawable.off);? ? ? ? ? ? }? ? ? ? }catch(Exception e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? }? ? }privatevoidplayOnOffSound(){? ? ? ? mp = MediaPlayer.create(FlashLightActivity.this, R.raw.flash_sound);? ? ? ? mp.setOnCompletionListener(newMediaPlayer.OnCompletionListener() {@OverridepublicvoidonCompletion(MediaPlayer mp){// TODO Auto-generated method stubmp.release();? ? ? ? ? ? }? ? ? ? });? ? ? ? mp.start();? ? }
在turnOffFlashLight()中,我們通過設(shè)置mCameraManager.setTorchMode(mCameraId, false);關(guān)閉LED手電筒是尖。同樣的意系,在turnOnFlashLight()中,我們通過設(shè)置 mCameraManager.setTorchMode(mCameraId, true);打開閃光燈饺汹。在playOnOffSound()中蛔添,我們使用MediaPlayer類的create()方法來發(fā)出點(diǎn)擊的聲音。
最后兜辞,通過添加以下代碼覆蓋Activity Lifecycle方法迎瞧。當(dāng)app被用戶最小化時,我們會關(guān)閉閃光燈逸吵,但只要用戶回到app凶硅,閃光燈又會恢復(fù)。
@OverrideprotectedvoidonStop(){super.onStop();if(isTorchOn){? ? ? ? ? ? turnOffFlashLight();? ? ? ? }? ? }@OverrideprotectedvoidonPause(){super.onPause();if(isTorchOn){? ? ? ? ? ? turnOffFlashLight();? ? ? ? }? ? }@OverrideprotectedvoidonResume(){super.onResume();if(isTorchOn){? ? ? ? ? ? turnOnFlashLight();? ? ? ? }? ? }}
現(xiàn)在扫皱,在實(shí)際設(shè)備上運(yùn)行這個app足绅,打開手電筒捷绑,然后用自己的手電筒應(yīng)用程序在黑暗中找尋東西。你可以通過點(diǎn)擊頂部的Download Now按鈕下載Android手電筒app源代碼编检。你也可以通過點(diǎn)擊上面的Download APK下載上面的手電筒apk胎食。