4

当我打电话时用相机拍照时

File file = new File(getFilesDir().getAbsolutePath() + "/myImage.jpg");
Uri outputFileUri = Uri.fromFile(file);

cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

OK buttonon camera 应用程序无法运行,根本不执行任何操作(实际上不会将其保存到我提供的内部存储器中,因此应用程序本身什么也不执行)。

但是,如果我打电话

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myImage.jpg");
Uri outputFileUri = Uri.fromFile(file);

cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

一切都很好,照片存储在 SDCard 上。

我的问题是,有没有办法在没有 SDCard的情况下以全分辨率存储捕获的照片?

4

3 回答 3

9

原生相机应用程序无法将图像保存在应用程序的私有内部目录中,因为这些目录仅适用于您的特定应用程序。

相反,您可以创建自定义相机活动以将图像保存到您的内部目录,或者您需要使用带有外部存储的股票相机应用程序。

注意:如果您计划创建自定义相机活动,请确保您的目标至少为 2.3 及更高版本。低于该标记的任何内容都很难处理。

于 2012-11-15T16:53:15.207 回答
5

相机活动将无法将文件保存到活动的私有文件目录中,这就是它悄悄失败的原因。您可以将图像从外部存储移动到 onActivityResult 中的文件目录中。

于 2012-11-15T16:52:33.227 回答
1

您需要添加权限

cameraIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

这可以使用文件提供程序。请参考样品

  public getOutputUri(@NonNull Context pContext) {
    String photo = photo.jpeg;//your file name
    File photoFile = new File(pContext.getFilesDir(), photo);
    Uri lProviderPath = FileProvider.getUriForFile(pContext,
        pContext.getApplicationContext()
            .getPackageName() + ".provider", photoFile);
    return lProviderPath;
  }



  private void capturePhoto() {
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getOutputUri(this));
      cameraIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      startActivityForResult(cameraIntent, 1);
  }

有关更多详细信息,请参阅以下 android 文档 https://developer.android.com/reference/android/support/v4/content/FileProvider

于 2019-07-09T06:19:08.800 回答