Сделайте снимок с камеры в android 10 - PullRequest
0 голосов
/ 23 апреля 2020

Со всеми изменениями в android 10, которые связаны с областью хранения, как мы можем открыть камеру. Я видел учебник, предлагающий использовать файловый провайдер, но я не совсем понял. Можете ли вы предоставить фрагмент кода для запуска камеры и получения снятого изображения?

Редактировать: В этой статье: https://medium.com/@arkapp / accessing-images-on- android -10- scoped-storage-bbe65160c3f4 Он предоставил этот код:

    fun takePicture(context: Activity, imageName: String) {try {
  val capturedImgFile = File(
      context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),
      imageName)

  captureImgUri = FileProvider.getUriForFile(
      context, 
      context.applicationContext.packageName + ".my.package.name.provider",
      capturedImgFile)val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).also {

   it.putExtra(MediaStore.EXTRA_OUTPUT, captureImgUri)
   it.putExtra("return-data", true)
   it.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
   context.startActivityForResult(it, REQUEST_CODE_TAKE_PICTURE)

  }
 } catch (e: ActivityNotFoundException) {e.printStackTrace()}
}@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

 if (resultCode != RESULT_OK) {return}

 if (requestCode == REQUEST_CODE_TAKE_PICTURE) {

  /*We cannot access the image directly so we again create a new File at different location and use it for futher processing.*/

  Bitmap capturedBitmap = getBitmap(this, captureImgUri)

  /*We are storing the above bitmap at different location where we can access it.*/  val capturedImgFile = File(
   getExternalFilesDir(Environment.DIRECTORY_PICTURES), 
   getTimestamp() + "_capturedImg.jpg");  convertBitmaptoFile(capturedImgFile, capturedBitmap)/*We have to again create a new file where we will save the processed image.*/  val croppedImgFile = File(
    getExternalFilesDir(Environment.DIRECTORY_PICTURES), 
    getTimestamp() + "_croppedImg.jpg");  startCrop(
     this,
     Uri.fromFile(capturedImgFile),
     Uri.fromFile(croppedImgFile))}
 super.onActivityResult(requestCode, resultCode, data)
}

У меня есть два вопроса:

  • Что делает эта строка: it.putExtra ("return-data ", правда)
  • в OnActivityResulty, почему он просто не использовал URI напрямую, он сначала создал файл, а затем проанализировал файл в URI, для чего это нужно? как это сделать android 10 объем хранилища?

1 Ответ

3 голосов
/ 24 апреля 2020

Что делает эта строка: it.putExtra ("return-data", true)

Обычно ничего. Вполне возможно, что есть некоторые приложения камеры, которые будут что-то делать при получении этого недокументированного и (как правило) неподдерживаемого Intent доп.

в OnActivityResulty, почему он просто не использовал uri напрямую

Он делает, на более ранних этапах. В конце он хочет использовать uCrop, чтобы позволить пользователю обрезать изображение. Возможно, он хочет сохранить как оригинал, так и обрезанное фото.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...