用相机拍照并存储在内部而不是外部存储中

Take pictures with camera and store in internal instead of external storage

我正在尝试使用内置 Android 相机拍照。我一直在学习如何捕捉图像的教程,但它只教如何捕捉图片并将它们存储到 SD 卡上。目前,每当尝试使用代码进行内部存储时,应用程序都会崩溃。下面是我拥有的一部分代码,我不确定如何更改以使内部存储正常工作。

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    _image = ( ImageView ) findViewById( R.id.image );
    _field = ( TextView ) findViewById( R.id.field );
    _button = ( Button ) findViewById( R.id.button );
    _button.setOnClickListener( new ButtonClickHandler() );

     _path = Environment.getExternalStorageDirectory() + "/images/make_machine_example.jpg";
}
protected void startCameraActivity()
{
    File file = new File( _path );
    Uri outputFileUri = Uri.fromFile( file );

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

    startActivityForResult( intent, 0 );
}

您不能为第三方应用提供您应用内部存储的路径并期望其他应用能够使用它,因为其他应用没有读取或写入权限来使用您的内部存储。

最简单的办法就是把图片用外存,然后复制到内存上你想要的位置,复制完成后删除外存上的原件。

也许可行的解决方案是使用安全的 FileProvider 来为相机应用提供对内部存储的访问。这绝对适用于允许其他应用程序读取您的内部存储,并且 FileProvider 似乎支持写入操作,但我从未尝试过写入操作,更不用说相机应用程序了。

虽然可行,但很费工夫的解决方案是自己拍照,使用 android.hardware.Camera and/or android.hardware.camera2,而不是调用第三方应用程序。

目前您的应用无法存储在外部存储 (getExternalStorageDirectory()) 中,这主要不是可移动的微型 SD 卡。除了可移动和外部存储器 android 设备也有内部存储器。要让 camara 应用程序将图片放入您的私人内部存储空间,您可以提供一个内容提供者。