如果我正在打电话,我正在拍相机照片
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卡上。
我的问题是,有没有办法在没有SDCard的情况下以全分辨率存储捕获照片?
答案 0 :(得分:9)
原生相机应用无法将图像保存在应用的私人内部目录中,因为这些只适用于您的特定应用。
相反,您可以创建自定义相机活动以将图像保存到内部目录,或者您需要将库存相机应用与外部存储一起使用。
注意:如果您打算创建自定义相机活动,请确保定位至少2.3及以上。低于该标记的任何东西都很难使用。
答案 1 :(得分:5)
Camera活动将无法将文件保存到您活动的私人文件目录中,这就是它安静地失败的原因。您可以将图像从外部存储器移动到onActivityResult中的文件目录中。
答案 2 :(得分:0)
可以使用文件提供程序。请参考样本
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