編輯:Android資訊
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
在本文中,我們將介紹如何創建Android免費手電筒應用程序。此教程是“Learn By Doing”教程系列的一部分,在這裡我們將向你展示如何創建簡單的Android app。這將會幫助Android開發新手增加經驗。在學習了本教程之後,你就可以為Android手機創建最好的手電筒app,並通過Google play散播開來。
要下載完整的源代碼,請訪問以下鏈接,並在點擊Download Now按鈕來下載app apk,請訪問以下鏈接並點擊Download APK按鈕:
使用Camera2 API的Android手電筒應用程序教程
我們希望你已經安裝了Android Studio。如果還沒有,那麼按照教程安裝Android Studio,然後再回到這裡。也可以在閱讀本教程之前,建議你先做一個簡單的Hello World app,並在智能手機上運行。你可以學習如何連接,如何在實體Android設備上配置應用,以及如何通過Android Studio運行Hello World程序。好了,現在讓我們開始創建我們的LED手電筒應用程序吧。首先通過如下方式在Android Studio中創建一個新項目。
請按照下列步驟做:




Gradle會同步項目和解決所有的依賴。
打開AndroidManifest.xml文件並添加以下權限:
<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" />
這些uses-permissions標簽告訴Android操作系統,我們的app需要訪問CAMERA 和FLASHLIGHT。同樣uses-feature告訴了在app中將使用什麼功能。
LED Flash Light應用程序只能在人像模式下工作,因此添加下面的代碼到activity 標簽。
android:screenOrientation="portrait"
完整的AndroidManifest.xml如下:
AnroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidtutorialpoint.ledflashlight" >
<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:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".FlashLightActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
除了軟件包的名稱,其他一切應該都和你的一樣。
打開activity_flash_light.xml並添加以下代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.camera2.MainActivity"
android:background="#000"
android:gravity="center">
<ImageButton
android:layout_gravity="center"
android:id="@+id/button_on_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#000"
android:src="@drawable/off"/>
</LinearLayout>
我們正在使用ImageButton。當用戶按下此按鈕時,LED手電筒將被切換。
如果你還是Android開發新手,那麼可以通過下面的教程來了解更多關於Android布局的基礎。
打開FlashLightActivity.java並聲明下列變量。
FlashLightActivity.java
package com.androidtutorialpoint.ledflashlight;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
public class FlashLightActivity extends AppCompatActivity {
private CameraManager mCameraManager;
private String mCameraId;
private ImageButton mTorchOnOffButton;
private Boolean isTorchOn;
private MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("FlashLightActivity", "onCreate()");
setContentView(R.layout.activity_flash_light);
mTorchOnOffButton = (ImageButton) findViewById(R.id.button_on_off);
isTorchOn = false;
在這裡,我們只聲明變量,並在onCreate()方法中設置活動布局。我們還從布局中引用了mTorchOnOffButton Button。後面我們會再具體談一談。這是我們將使用Camera2API,因為Camera API在Android中現在已經過時了。
我們需要檢測設備是否具有手電筒。萬一設備不支持手電筒,那麼我們需要用警報消息來提醒用戶。
添加下面的代碼在上面的FlashActivity 活動代碼的下面。
FlashLightActivity
Boolean isFlashAvailable = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
if (!isFlashAvailable) {
AlertDialog alert = new AlertDialog.Builder(FlashLightActivity.this)
.create();
alert.setTitle("Error !!");
alert.setMessage("Your device doesn't support flash light!");
alert.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// closing the application
finish();
System.exit(0);
}
});
alert.show();
return;
}
如果你的手機不支持相機閃光燈,那麼你會得到以下錯誤。
按下OK按鈕,應用程序會關閉。

接下來,我們把代碼添加到onCreate()方法以獲得CameraManager對象。然後,我們設置OnClickListener()來開/關LED手電筒應用的按鈕。
在OnClickListener()中,我們檢查手電筒當前是開啟還是關閉的,然後我們調用turnOffFlashLight()來關閉閃光燈,在手電筒已經開啟的情況下,以及調用turnOnFlashLight()來開啟閃光燈,在手電筒當前是關閉的情況下。
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
mCameraId = mCameraManager.getCameraIdList()[0];
} catch (CameraAccessException e) {
e.printStackTrace();
}
mTorchOnOffButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (isTorchOn) {
turnOffFlashLight();
isTorchOn = false;
} else {
turnOnFlashLight();
isTorchOn = true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
接下來,我們要添加turnOffFlashLight()和turnOnFlashLight()方法分別用於關閉和開啟閃光燈。我們還要添加一個方法playOnOffSound給一個點擊按鈕的聲音效果。
public void turnOnFlashLight() {
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();
}
}
public void turnOffFlashLight() {
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();
}
}
private void playOnOffSound(){
mp = MediaPlayer.create(FlashLightActivity.this, R.raw.flash_sound);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
mp.start();
}
在turnOffFlashLight()中,我們通過設置mCameraManager.setTorchMode(mCameraId, false);關閉LED手電筒。同樣的,在turnOnFlashLight()中,我們通過設置mCameraManager.setTorchMode(mCameraId, true);打開閃光燈。在playOnOffSound()中,我們使用MediaPlayer類的create()方法來發出點擊的聲音。
最後,通過添加以下代碼覆蓋Activity Lifecycle方法。當app被用戶最小化時,我們會關閉閃光燈,但只要用戶回到app,閃光燈又會恢復。
@Override
protected void onStop() {
super.onStop();
if(isTorchOn){
turnOffFlashLight();
}
}
@Override
protected void onPause() {
super.onPause();
if(isTorchOn){
turnOffFlashLight();
}
}
@Override
protected void onResume() {
super.onResume();
if(isTorchOn){
turnOnFlashLight();
}
}
}
現在,在實際設備上運行這個app,打開手電筒,然後用自己的手電筒應用程序在黑暗中找尋東西。你可以通過點擊頂部的Download Now按鈕下載Android手電筒app源代碼。你也可以通過點擊上面的Download APK下載上面的手電筒apk。
我們將在Learn By Doing中涵蓋更多的教程!如果大家有任何疑問或建議的話,請在下面留下評論。
要下載完整的源代碼,可以訪問以下鏈接,並點擊Download Now按鈕,要下載app apk,請訪問鏈接並點擊Download APK 按鈕:
使用Camera2 API的Android手電筒應用程序教程
這篇文章,以及相關的源代碼和文件許可發布遵循Code Project Open License (CPOL)。
Android如何實現TCP和UDP傳輸
TCP和UDP在網絡傳輸中非常重要,在Android開發中同樣重要。 首先我們來看一下什麼是TCP和UDP。 什麼是TCP? TCP:Transmission C
高質量 Android 開發框架 LoonAndroid 詳解
整個框架式不同於androidannotations,Roboguice等ioc框架,這是一個類似spring的實現方式。在整應用的生命周期中找到切入點,然後對a
Android中使用Android Ksoap2調用WebService
一、WebService介紹 WebService是基於SOAP協議可實現web服務器與web服務器之間的通信,因采用SOAP協議傳送XML數據具有平台無關性,也
Android 沉浸式全屏的實現方法
Android 4.4 帶來了沉浸式全屏體驗, 在沉浸式全屏模式下, 狀態欄、 虛擬按鍵動態隱藏, 應用可 以使用完整的屏幕空間, 按照 Google 的說法,