用相机拍照并存储在内部而非外部存储器中

时间:2015-03-21 17:18:23

标签: java android android-studio photo-gallery

我正在尝试使用内置的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 );
}

2 个答案:

答案 0 :(得分:3)

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

简单的解决方案是为图片使用外部存储,然后将其复制到内部存储上的所需位置,在复制完成后删除外部存储上的原件。

可能它可能正常工作的解决方案是使用安全的FileProvider来访问您的内部存储设备到相机应用程序。这肯定适用于允许其他应用程序读取您的内部存储空间,FileProvider似乎支持写入操作,但我从未尝试过写入操作,更不用说使用相机应用程序了。

它的工作 - 但是 - 它是一个很多工作的解决方案是使用android.hardware.Camera和/或android.hardware.camera2自己拍照,而不是调用第三方应用程序。

答案 1 :(得分:1)

目前,您的应用程序无法存储在外部存储设备(getExternalStorageDirectory())中,而外部存储设备主要不是可移动的micro SD卡。除了可移动和外部存储器,Android设备也有内部存储器。要让camara app将图片放到您的私人内部存储中,您可以提供内容提供者。