如何在android中打开相机应用程序[重复]

Posted

技术标签:

【中文标题】如何在android中打开相机应用程序[重复]【英文标题】:How to open camera app in android [duplicate] 【发布时间】:2017-06-02 08:03:55 【问题描述】:

我正在构建一个应用程序,该应用程序需要从安装我的应用程序的设备打开默认相机应用程序的功能;我的问题是如何实现它?

在谷歌搜索一段时间后,我了解到如何从应用程序中打开相机,但我想要实现的实际上是打开可以使用相机应用程序具有的任何功能的默认相机。你能告诉我如何实现相机吗?

【问题讨论】:

【参考方案1】:

您可以使用意图打开相机应用

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

完成相机应用后,现在将图像恢复

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (requestCode == CAMERA_PIC_REQUEST) 
          Bitmap image = (Bitmap) data.getExtras().get("data");
          // do whatever you want with the image now
    

希望这会有所帮助。

【讨论】:

【参考方案2】:

要在您的 Android 手机中使用内置的相机应用程序,您需要做一些事情 第一:

设备必须有摄像头 您的应用必须有拍照权限 您的应用程序必须具有保存图片的权限(如果您 打算)

要解决上述问题,您需要在清单文件中添加以下代码,以获取使用相机拍照的权限,以及如果您的应用的主要功能要求设备具有相机

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

如果需要,您还需要在清单文件中添加写入/保存图像的权限,此权限还允许您的应用具有读取权限(此示例不需要)

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

最后请记住,您要求 Android 为您工作,因此它会向您返回一个结果,该图像需要使用 startActivityForResult 并传递代码或将其视为您的应用程序和您的应用程序的标识符 ID Android 会使用 123,它可以是任何整数,只要它不用于 Activity 中的任何其他目的,而不是用于拍照目的:

成员变量

static final int REQUEST_TAKE_PHOTO = 123;

private void takePicture() 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
        startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
    

将此添加到按钮或图像按钮,以便单击将调用 takePicture 方法

最后一步是请记住,Android 将返回您需要接受的图像或结果数据,并且根据上述标识符代码 REQUEST_TAKE_PHOTO = 123 / requestCode。有一个方法需要你重写

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) 
            Bundle extras = data.getExtras();
            // Sample data cast to  thumbnail
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            // Do whatever you want with the thumbnail such as setting it to image view
            mImageView.setImageBitmap(imageBitmap);
        
    

Source: Android Take Photos

【讨论】:

1. AFAIK 每个安卓设备都有摄像头。 2. 使用意图打开相机应用无需权限或功能。 @KetanAhir 嗨,我猜你错过了底部附加的源链接。 1. “每个 android 设备都有摄像头”,这并不完全正确,Android 是一个操作系统,该操作系统几乎用于从电话、汽车、电视、电视盒(在线香奈儿)到定制手持订单平板电脑等任何东西让假设你确实做了Android 手机和平板电脑的构建仍然我们回到“不完全正确”,有些设备没有摄像头,但可以访问 Play 商店,如上所述,简单的谷歌搜索“Android 手机没有摄像头”会告诉你我的观点。跨度> @KetanAhir "No permission or feature required to open camera app using intent" true 因为Android会处理这个问题,原来的问题是关于“打开默认相机”回到我的第一点检查相机第一名。在构建 android 应用程序时,最好和推荐的做法是“如果您的应用程序的主要功能要求设备具有摄像头”,您需要添加此权限,以便 Google Play 商店将您的应用程序提供给实际具有摄像头的设备。良好的旧 Android 编程实践 :) 同意。但是当我们使用意图打开默认相机应用程序时,我们不需要权限。同样,如果设备中安装了相机应用程序,则意味着设备具有相机。我们只需要在启动相机应用程序时处理 ActivityNotFoundException。所以我们不需要照顾你的两点。【参考方案3】:

只需向相机发送Intent 请求拍照:

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    

更多详情:https://developer.android.com/training/camera/photobasics.html

【讨论】:

以上是关于如何在android中打开相机应用程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android从按钮打开相机

Android:如何调用相机[重复]

在Android中打开相机闪光灯LED? [复制]

如何记录在Android中打开相机的历史记录

如何使用您的 Android 应用程序中的意图以专业模式打开默认相机应用程序?

打开相机意图时如何防止android应用程序方向