📜  安卓 |如何通过 Intent 打开相机并显示捕获的图像

📅  最后修改于: 2022-05-13 01:55:46.040000             🧑  作者: Mango

安卓 |如何通过 Intent 打开相机并显示捕获的图像

先决条件:

  • 面向初学者的 Android 应用开发基础知识
  • 安装和设置 Android Studio 指南
  • 安卓 |从第一个 app/android 项目开始
  • 安卓 |运行您的第一个 Android 应用程序

本文的目的是展示如何从应用程序内部打开相机并单击图像,然后在同一应用程序中显示此图像。本文开发了一个android应用程序来实现这一点。在我们的应用程序内部打开相机是借助MediaStore类的ACTION_IMAGE_CAPTURE Intent 实现的。

例如:

此图像显示了相机单击并在 Imageview 中设置的图像。当应用程序打开时,它会显示“相机”按钮以打开相机。按下时,ACTION_IMAGE_CAPTURE Intent 由 MediaStore 类启动。当图像被捕获时,它会显示在 imageview 中。

如何创建应用程序以通过 Intent 打开相机并显示捕获的图像

第 1 步:首先创建一个新的 Android 应用程序。这将创建一个 XML 文件“activity_main.xml”和一个Java文件“MainActivity.xml”。Java”。请参阅先决条件以了解有关此步骤的更多信息。

第 2 步:打开“activity_main.xml”文件并在相对布局中添加以下小部件:

  • 打开相机的按钮
  • 用于显示捕获的图像的ImageView

此外,将 ID 与其他属性一起分配给每个组件,如图像和下面的代码所示。为组件分配的 ID 有助于在Java文件中轻松找到和使用该组件。

句法:

android:id="@+id/id_name"

这里给定的ID如下:

  • 相机按钮:camera_button
  • 图像视图:click_image

此步骤将制作应用程序的 UI。

第 3 步:现在,在 UI 之后,此步骤将创建应用程序的后端。为此,请打开“MainActivity. Java”文件并使用 findViewById() 方法实例化 XML 文件中制作的组件(相机按钮、ImageView)。此方法借助分配的 ID 将创建的对象绑定到 UI 组件。

一般语法:

使用的组件的语法:

第四步:这一步是设置Camera Button和ImageView的操作。这些操作如下:

  • 首先定义变量 pic_id,即点击图片的请求 id。这是按如下方式完成的:
  • 在“相机”按钮上添加侦听器。当用户单击按钮时,这将用于打开相机。这是按如下方式完成的:
  • 现在创建 MediaStore 提供的 ACTION_IMAGE_CAPTURE Intent。此 Intent 将有助于打开相机以捕获图像。使用请求的 pic_id 启动意图。这是按如下方式完成的:
  • 现在使用 onActivityResult() 方法获取结果,这里是捕获的图像。这是按如下方式完成的:
  • 然后在 ImageView 中设置作为相机意图结果接收到的图像以进行显示。

第5步:现在运行应用程序并进行如下操作:

  • 当应用程序打开时,它会显示一个“相机”按钮。单击它以打开相机。
  • 捕获图像并显示捕获的图像。

MainActivity 的完整代码。下面是相机应用程序的Java和 activity_main.xml。

文件名:activity_main.xml

XML


 
    
    


Java
package org.geeksforgeeks.navedmalik.camera;
 
import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
 
public class MainActivity extends AppCompatActivity {
 
    // Define the pic id
    private static final int pic_id = 123;
 
    // Define the button and imageview type variable
    Button camera_open_id;
    ImageView click_image_id;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // By ID we can get each component
        // which id is assigned in XML file
        // get Buttons and imageview.
        camera_open_id = (Button)findViewById(R.id.camera_button);
        click_image_id = (ImageView)findViewById(R.id.click_image);
 
        // Camera_open button is for open the camera
        // and add the setOnClickListener in this button
        camera_open_id.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v)
            {
 
                // Create the camera_intent ACTION_IMAGE_CAPTURE
                // it will open the camera for capture the image
                Intent camera_intent
                    = new Intent(MediaStore
                                     .ACTION_IMAGE_CAPTURE);
 
                // Start the activity with camera_intent,
                // and request pic id
                startActivityForResult(camera_intent, pic_id);
            }
        });
    }
 
    // This method will help to retrieve the image
    protected void onActivityResult(int requestCode,
                                    int resultCode,
                                    Intent data)
    {
 
        // Match the request 'pic id with requestCode
        if (requestCode == pic_id) {
 
            // BitMap is data structure of image file
            // which stor the image in memory
            Bitmap photo = (Bitmap)data.getExtras()
                               .get("data");
 
            // Set the image in imageview for display
            click_image_id.setImageBitmap(photo);
        }
    }
}


文件名:MainActivity。Java

Java

package org.geeksforgeeks.navedmalik.camera;
 
import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
 
public class MainActivity extends AppCompatActivity {
 
    // Define the pic id
    private static final int pic_id = 123;
 
    // Define the button and imageview type variable
    Button camera_open_id;
    ImageView click_image_id;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // By ID we can get each component
        // which id is assigned in XML file
        // get Buttons and imageview.
        camera_open_id = (Button)findViewById(R.id.camera_button);
        click_image_id = (ImageView)findViewById(R.id.click_image);
 
        // Camera_open button is for open the camera
        // and add the setOnClickListener in this button
        camera_open_id.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v)
            {
 
                // Create the camera_intent ACTION_IMAGE_CAPTURE
                // it will open the camera for capture the image
                Intent camera_intent
                    = new Intent(MediaStore
                                     .ACTION_IMAGE_CAPTURE);
 
                // Start the activity with camera_intent,
                // and request pic id
                startActivityForResult(camera_intent, pic_id);
            }
        });
    }
 
    // This method will help to retrieve the image
    protected void onActivityResult(int requestCode,
                                    int resultCode,
                                    Intent data)
    {
 
        // Match the request 'pic id with requestCode
        if (requestCode == pic_id) {
 
            // BitMap is data structure of image file
            // which stor the image in memory
            Bitmap photo = (Bitmap)data.getExtras()
                               .get("data");
 
            // Set the image in imageview for display
            click_image_id.setImageBitmap(photo);
        }
    }
}

输出: