Android 图像捕获后如何将内容转换为文件?
我使用以下代码片段在android中使用摄像头拍摄图像Android 图像捕获后如何将内容转换为文件?,android,Android,我使用以下代码片段在android中使用摄像头拍摄图像 Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(Constants.ATTACH_IMAGE); imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); imageIntent.putExtra("outputFormat",Bitm
Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(Constants.ATTACH_IMAGE);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
imageIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());startActivityForResult(imageIntent, Constants.ATTACH_IMAGE);
在onActivityResult中,我想将“content://”uri转换回文件,压缩它并显示一个缩略图。
我怎么做
编辑:-
我所尝试的:-
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("activity result","coming" + String.valueOf(requestCode)+ contentFileUri);
// View popupView = getActivity().getLayoutInflater().inflate(R.layout.popup_add_snag, null);
// LinearLayout attachLayout = (LinearLayout)popupView.findViewById(R.id.attachLayout);
// ImageView photoImageicon = (ImageView)popupView.findViewById(R.id.imageicon);
try{
// if (resultCode == Constants.RESULT_OK){
if(contentFileUri !=null) {
Log.d("fileuri", contentFileUri.toString());
String attachmentType = "IMAGE";
// mAdapter.attachmentType=attachmentType;
photoImageIcon.setVisibility(View.VISIBLE);
// attachLayout.setVisibility(View.INVISIBLE);
Toast.makeText(getActivity().getApplicationContext(), R.string.successfull_image, Toast.LENGTH_SHORT).show();
Log.d("fileuri", contentFileUri.toString());
InputStream inputStream = getContext().getContentResolver().openInputStream(contentFileUri);
contentFileUri如下所示:-“content://com.fa.ha.provider/external_files/F/7c7.jpeg"
但上面的结果是最后一行出现“FileNotFound异常,而不是目录”。理想情况下,只需挂起
getOutputMediaFileUri()
正在创建的文件。希望,getOutputMediaFileUri()
正在基于文件
为您设置一个文件提供程序
Uri
,因此如果您保留文件
,您不必担心“转换”任何内容。看
如果getOutputMediaFileUri()
写得不好,可能您没有文件。在这种情况下,在onActivityResult()
中,您可以将Uri
传递到图像加载库(毕加索、Glide等),并让它填充ImageView
,或者为您加载位图
。File File File=new File(fileUri.getPath())
?这不是问题所在的fileUri,这是一个contentUri。请参见ContentResolver#openInputStream
,我尝试了,openInputStream
正在工作是的。ContentResolver#openInputStream()将执行此操作。展示你的努力。请在你的帖子里。谢谢。。。。但两者都在不同的片段中(getOutputMediaFileUri()和onActivityResult()),因此我必须为文件创建一个成员变量,有什么方法可以避免它吗?例如,为了提供信息,我想从Uri重新创建文件。@SreekanthKarumanaghat:“有什么方法可以避免它吗?”--不。无论如何,Uri
都需要一个字段/成员变量。毕竟,正如文档所示,ACTION\u IMAGE\u CAPTURE
不会返回任何内容,比如你的Uri
。你说得很好。但是问了一个一般性问题。我有没有办法将内容Uri转换为文件?@SreekanthKarumanaghat:注释中已经告诉了我们如何做。CallopenInputStream()
在ContentResolver
上,提供Uri
。在您控制的某个文件上打开FileOutputStream
。使用标准Java I/O将InputStream
中的字节复制到FileOutputStream
。然后使用生成的文件。