【问题标题】:Taking multiple photos via Intent通过 Intent 拍摄多张照片
【发布时间】:2014-08-19 11:09:56
【问题描述】:

我想通过 Intent 拍摄多张照片。我知道如何只拍一张照片,但如果我想拍一张照片怎么办? 10 张照片?

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);
  }
}

简单的解决方案是在结果之后再做一个意图,但我认为必须有更好的解决方案,不是吗?

【问题讨论】:

    标签: java android android-intent camera


    【解决方案1】:

    你必须使用一些技巧来做某事,stackoverflow 上的一个问题会帮助你,see this link 第二次检查this link 这两个链接肯定会对您有所帮助。 第二个链接推荐此代码

    Intent intent = new Intent(
        MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
    this.startActivity(intent);
    

    【讨论】:

    • 谢谢。我还有一个问题,你知道吗,我怎样才能拍到照片?
    • 你必须在保存所拍照片的地方保留一个uri... Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);字符串文件名 = TravellerUtils.generateUniqueID() + IMAGE_FILE_EXT;文件 file = new File(Environment.getExternalStorageDirectory(), TravellerConstants.IMAGE_PATH + fileName); Uri outputFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, TAKE_PICTURE);不知道确切的解决方案,但您现在可以了解
    • 为什么要删除问题选择?我已经回答了你的问题?
    • 对不起,我的错误 :) 非常感谢。我会试试的。
    【解决方案2】:

    就我而言,我必须使用MediaStore.ACTION_IMAGE_CAPTURE 才能禁用从手机图库中选择图像。

    为了在拍摄多张照片时实现“相似”行为,我直接从onActivityResult 开始下一个相机意图,同时在后台处理最近拍摄的照片。

    代码如下:

    ...
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode != REQUEST_IMAGE_CAPTURE) {
                return
            }
            if (resultCode == Activity.RESULT_CANCELED) {
                Timber.d("Taking image was cancelled")
                return
            }
            if (resultCode == Activity.RESULT_OK) {
                lastTakenPhotoData?.let {
                    handlePhotoTaken(it)
                    startCameraIntent()
                }
            }
        }
    ...
    
        private fun handlePhotoTaken(...) {
            disposable.add(
                Single.fromCallable { compressPhotoTaken(data) }
                        .subscribeOn(Schedulers.computation())
                        .observeOn(AndroidSchedulers.mainThread()).subscribe { _ ->
                            //update UI with processed photo
                        }
            )
        }
    ...
        private fun compressTakenPhoto(...) {
            //rotate, compress, save taken photo to the local file if needed
            //this part was taking quite a lot of time, so it is better to do it in background
        }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多