的Android ACTION_IMAGE_CAPTURE与EXTRA_OUTPUT在内部存储器中(

2019-08-02 18:52发布

当我拍摄照片从相机,如果我打电话

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 button相机应用程序不能正常工作,只是不执行任何操作(实际上不会保存到内部存储器我提供我猜,因此应用程序本身并没有什么)。

然而,如果我打电话

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

一切都很好,和照片存储在SD卡。

我的问题是,是否有存储拍摄的照片在全分辨率没有SD卡的方式?

Answer 1:

本机摄像头的应用程序不能保存在应用程序的私有内部目录中的形象,那些只提供给您的特定的应用程序。

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

注意:如果你打算创建一个自定义相机活动确保您指定至少2.3以上。 该商标下面什么是非常困难的工作。



Answer 2:

该摄像头活动将无法将文件保存到您的活动的私人文件目录,这就是为什么它静静地失败。 您可以将图像从外部存储在onActivityResult进入你的文件目录。



Answer 3:

这是可能的使用文件提供。 请参考样本

  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



文章来源: Android ACTION_IMAGE_CAPTURE with EXTRA_OUTPUT in internal memory