如何在 Android 平臺上以程式設計方式開啟前置攝像頭?


簡介

許多移動應用程式在其功能中指定了透過前置攝像頭捕捉使用者影像的功能。我們可以在 Snapchat、Instagram 等應用程式中看到此類功能。在本文中,我們將瞭解如何在 Android 應用程式中開啟前置攝像頭並在應用程式中顯示捕獲的影像。

在 Android 中實現前置攝像頭

我們將建立一個簡單的應用程式,其中我們將顯示一個簡單的文字檢視來顯示應用程式的標題。之後,我們將顯示一個影像檢視來顯示捕獲的影像。然後,我們將顯示一個按鈕,我們將使用它從前置攝像頭捕獲影像。我們將按照分步指南在 Android 中實現兩個數字的加法。

步驟 1:在 Android Studio 中建立一個新專案

導航到 Android Studio,如下面的螢幕所示。在下面的螢幕中,單擊“新建專案”以建立一個新的 Android Studio 專案。

單擊“新建專案”後,您將看到下面的螢幕。

在此螢幕中,我們只需選擇“空活動”並單擊“下一步”。單擊“下一步”後,您將看到下面的螢幕。

在此螢幕中,我們只需指定專案名稱。然後包名稱將自動生成。

注意 - 確保選擇 Kotlin 作為語言。

指定所有詳細資訊後,單擊“完成”以建立一個新的 Android Studio 專案。

建立專案後,我們將看到 2 個開啟的檔案,即 activity_main.xml 和 MainActivity.kt 檔案。

步驟 3:使用 activity_main.xml

導航到 activity_main.xml。如果此檔案不可見,則要開啟此檔案。在左側窗格中導航到 app>res>layout>activity_main.xml 以開啟此檔案。開啟此檔案後,將以下程式碼新增到其中。程式碼中添加了註釋以詳細瞭解。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
   tools:context=".MainActivity">

   <!-- creating text view for displaying heading-->
   <TextView
      android:id="@+id/idTVHeading"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_margin="20dp"
      android:gravity="center"
      android:text="Front Camera in Android"
      android:textAlignment="center"
      android:textAllCaps="false"
      android:textColor="#FF000000"
      android:textSize="20sp"
      android:textStyle="bold" />

   <!-- creating an image view for displaying image-->
   <ImageView
      android:id="@+id/idIVImage"
      android:layout_width="match_parent"
      android:layout_height="300dp"
      android:layout_below="@id/idTVHeading"
      android:layout_margin="10dp"
      android:padding="3dp" />

   <!-- creating a button to capture image-->
   <Button
      android:id="@+id/idBtnCaptureImage"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/idIVImage"
      android:layout_margin="10dp"
      android:padding="4dp"
      android:text="Capture Image"
      android:textAllCaps="false" />
</RelaiveLayout>

說明 - 在上面的程式碼中,我們建立了一個相對佈局作為根佈局,並在其中建立了我們的文字檢視以顯示簡單的標題。之後,我們建立了一個影像檢視以顯示捕獲的影像。最後,我們顯示了一個按鈕,我們將使用它從前置攝像頭捕獲影像。

步驟 4:使用 MainActivity.kt 檔案

導航到 MainActivity.java。如果此檔案不可見,則要開啟此檔案。在左側窗格中導航到 app>res>layout>MainActivity.kt 以開啟此檔案。開啟此檔案後,將以下程式碼新增到其中。程式碼中添加了註釋以詳細瞭解。

package com.gtappdevelopers.androidapplication

import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import android.widget.ImageView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {

   // creating variable for buttons, image view on below line.
   lateinit var captureImageBtn: Button
   lateinit var imageView: ImageView

   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      
      // on below line initializing variables for buttons and image view.
      captureImageBtn = findViewById(R.id.idBtnCaptureImage)
      imageView = findViewById(R.id.idIVImage)
      
      // adding click listener for capture image button on below line.
      captureImageBtn.setOnClickListener {
         
         // on below line checking if permission is denied
         if (ContextCompat.checkSelfPermission(
            this@MainActivity,
            android.Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_DENIED
         ) {
            //on below line Requesting the camera permission
            ActivityCompat.requestPermissions(
               this@MainActivity,
               arrayOf(android.Manifest.permission.CAMERA),
               100
            )
         } else {
            // below method called when camera permission is already granted.
            // creating camera intent to capture image
            val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            // on below lien passing camera intent type as front camera.
            cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", 1)
            // on below line starting activity for result.
            startActivityForResult(cameraIntent, 123)
         }
      }
   }
   // on below line calling on activity result to set to our image view.
   override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
      super.onActivityResult(requestCode, resultCode, data)
      
      // on below line comparing the request code
      if (requestCode == 123) {
         
         // on below line getting image bitmap from our data and setting it to image view.
         val image = data!!.extras!!["data"] as Bitmap?
         imageView.setImageBitmap(image)
      }
   }
   override fun onRequestPermissionsResult(
      requestCode: Int,
      permissions: Array<out String>,
      grantResults: IntArray
   ) {
      // on below line handling permissions when accepting.
      super.onRequestPermissionsResult(requestCode, permissions, grantResults)
      if (requestCode == 123) {
         
         // on below line checking if the permissions are granted.
         if (grantResults.size != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
         
            // on below line displaying toast message as permissions granted and opening our camera intent
            Toast.makeText(this, "Camera Permission Granted..", Toast.LENGTH_SHORT).show()
            val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", 1)
            
            // on below line opening new activity.
            startActivityForResult(cameraIntent, 123)
         } else {
            
            // on below line displaying a toast message.
            Toast.makeText(this, "Camera Permission Denined..", Toast.LENGTH_SHORT).show()
         }
      }
   }

}

說明 - 在上面的程式碼中,首先我們為影像檢視、按鈕建立變數。之後,我們在我們的 onCreate 方法中使用我們在 activity_main.xml 檔案中給出的 id 初始化我們的影像檢視和按鈕變數。之後,我們為我們的捕獲影像按鈕添加了一個 onClick 監聽器。在 onClick 方法中,我們檢查相機許可權。如果許可權未授予,則我們請求相機許可權。如果許可權已授予,則我們透過將前置攝像頭傳遞給它來開啟相機意圖,以使用前置攝像頭捕獲影像。

然後,我們在其中獲取影像點陣圖並將該影像點陣圖設定為我們的影像檢視中建立了一個 onActivityResult 方法。之後,我們建立了另一個名為 onRequestPermissionResult 的方法。在此方法中,我們再次檢查相機許可權。如果授予相機許可權,則我們再次開啟相機意圖。否則,我們顯示吐司訊息,表明相機許可權被拒絕。

步驟 5:使用 AndroidManifest.xml 檔案

導航到 AndroidManifest.xml 檔案,並在其中新增以下相機許可權。

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

新增上述程式碼後,我們現在只需單擊頂欄中的綠色圖示即可在移動裝置上執行我們的應用程式。

注意 - 確保您已連線到您的真實裝置或模擬器。

輸出

結論

在以上教程中,我們學習瞭如何在 Android 應用程式中以程式設計方式訪問前置攝像頭並捕獲影像,並在 Android 應用程式中的影像檢視中顯示該影像。

更新於: 2023-03-30

4K+ 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告