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

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

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

【问题讨论】:

    标签: android android-camera


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-03
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 2015-12-23
        相关资源
        最近更新 更多