安卓 |如何通过 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 组件。
一般语法:
ComponentType object = (ComponentType)findViewById(R.id.IdOfTheComponent);
使用的组件的语法:
Button camera_open_id= (Button)findViewById(R.id.camera_button);
ImageView click_image_id = (ImageView)findViewById(R.id.click_image );
第四步:这一步是设置Camera Button和ImageView的操作。这些操作如下:
- 首先定义变量 pic_id,即点击图片的请求 id。这是按如下方式完成的:
private static final int pic_id = 123
- 在“相机”按钮上添加侦听器。当用户单击按钮时,这将用于打开相机。这是按如下方式完成的:
camera_open_id.setOnClickListener(new View.OnClickListener() {}
- 现在创建 MediaStore 提供的 ACTION_IMAGE_CAPTURE Intent。此 Intent 将有助于打开相机以捕获图像。使用请求的 pic_id 启动意图。这是按如下方式完成的:
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera_intent, pic_id);
- 现在使用 onActivityResult() 方法获取结果,这里是捕获的图像。这是按如下方式完成的:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { }
- 然后在 ImageView 中设置作为相机意图结果接收到的图像以进行显示。
Bitmap photo = (Bitmap) data.getExtras().get(“data”);
clicked_image_id.setImageBitmap(photo);
第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);
}
}
}
输出: