我想写一个模块,点击一个按钮,相机就会打开,我可以点击并捕捉图像.如果我不喜欢该图像,我可以将其删除,然后单击另一个图像,然后 Select 该图像,它将返回并在活动中显示该图像.

推荐答案

下面是一个示例活动,它将启动摄像头应用程序,然后检索图像并显示.

package edu.gvsu.cis.masl.camerademo;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MyCameraActivity extends Activity
{
    private static final int CAMERA_REQUEST = 1888; 
    private ImageView imageView;
    private static final int MY_CAMERA_PERMISSION_CODE = 100;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.imageView = (ImageView)this.findViewById(R.id.imageView1);
        Button photoButton = (Button) this.findViewById(R.id.button1);
        photoButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
                {
                    requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);
                }
                else
                {
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);
                } 
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == MY_CAMERA_PERMISSION_CODE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
            else
            {
                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {  
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)
        {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
        }  
    } 
}

请注意,摄像头应用程序本身可以让您查看/重新拍摄图像,一旦图像被接受,活动就会显示它.

以下是上述活动使用的布局.它只是一个线性布局,包含一个id为button1的按钮和一个id为imageview1的ImageView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/photo"></Button>
    <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_width="wrap_content"></ImageView>

</LinearLayout>

最后一个细节,请务必添加:

<uses-feature android:name="android.hardware.camera"></uses-feature> 

如果摄像头是应用程序功能的可选选项.确保在权限中将require设置为false.这样地

<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>

添加到您的MANIFENT.xml中.

Android相关问答推荐

view喷气背包中找不到模型组成

如何处理穿戴构图上的长点击事件?

Android 14上的慢速意图广播交付

Android Kotlin ImageView内置于Kotlin ImageView中.适配器未按预期更新

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

使用 async 向网络发出并行请求并在supervisorScope中处理它们

Material 3的MaterialSwitch默认大小太大了?如何使它变小?

Android - 如何使 TextInputEditText 的高度恰好为 2 行?

可从 Play store 下载链接访问未发布的应用

如何使用滑行加载媒体的专辑封面?

如何在ExecutorService中设置progressBar的进度?不想使用 AsyncTask,因为它已被弃用

setContentView() 方法的签名

以下代码如何在 Android 上运行

如何正确地将图像上传到 Jetpack Compose 中的 LazyList 中的项目?

Jetpack Compose 动画性能问题

根据 Jetpack Compose 中的生命周期正确处理变量/函数

如何在 Compose 中使用合并的单元格创建网格视图?

TextField 溢出和软包装不适用于 Compose 约束布局

Jetpack 组合和片段

为什么在try 实例化 Mediaplayer 时会出现 NullPointerException?安卓Kotlin