編輯: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)。
TCP和UDP在網絡傳輸中非常重要,在Android開發中同樣重要。 首先我們來看一下什麼是TCP和UDP。 什麼是TCP? TCP:Transmission C
整個框架式不同於androidannotations,Roboguice等ioc框架,這是一個類似spring的實現方式。在整應用的生命周期中找到切入點,然後對a
一、WebService介紹 WebService是基於SOAP協議可實現web服務器與web服務器之間的通信,因采用SOAP協議傳送XML數據具有平台無關性,也
Android 4.4 帶來了沉浸式全屏體驗, 在沉浸式全屏模式下, 狀態欄、 虛擬按鍵動態隱藏, 應用可 以使用完整的屏幕空間, 按照 Google 的說法,