从Android中的图像获取uri [英] Get uri from image in Android
问题描述
我正在尝试从图像获取路径,以便稍后将其发送到服务器.问题是当我尝试获取它时,我的代码不起作用(您会看到一个额外的}
.这是因为OnCreate中的代码结束了,然后我编写了其他函数):
I am trying to get the Path from an image to send it later to a server. The problem is when I try to get it, my code doesn't work (you will see there is an extra }
. That is because the code from the OnCreate ends and then I worte the other functions):
enviar.setOnClickListener(new View.OnClickListener() {
String datos="";
//Bundle extras=getIntent().getExtras();
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 0);
//Uri imagen=intent.getData();
//datos=imagen.getPath();
//mostrar.setText(datos);
}
});
}
private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case 0:
if(resultCode == this.RESULT_OK){
try {
final Uri imageUri = imageReturnedIntent.getData();
String path = getRealPathFromURI(imageUri);
mostrar.setText(path);
}
catch (Exception e) {
Log.e("Erroreeeee: ", e.getMessage());
}
}
break;
}
}
推荐答案
您有两个问题.
第一个是startActivityForResult()
不是立即的.在下一条语句中没有任何结果.
The first one is that startActivityForResult()
is not immediate. You do not have any results in the next statement.
因此,欢迎您致电startActivityForResult()
,就像我在
So, you are welcome to call startActivityForResult()
, as I do in this sample app:
private void get() {
Intent i=
new Intent()
.setType("image/png")
.setAction(Intent.ACTION_GET_CONTENT)
.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(i, REQUEST_GET);
}
您的结果将发送到onActivityResult()
:
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
if (resultCode==Activity.RESULT_OK) {
Uri image=resultData.getData();
// do something
}
}
您的第二个问题是您认为自己正在选择文件.你不是.您正在使用用户决定具有句柄ACTION_GET_CONTENT
的任何活动来选择内容.仅当Uri
的方案为file
时,getPath()
才有意义,而这不太可能.没有可靠的方法来获取任意Uri
的文件系统路径,原因很简单,因为Uri
不必指向文件.
Your second problem is that you are thinking that you are picking a file. You are not. You are picking a piece of content, using any activity that the user decides to have handle ACTION_GET_CONTENT
. getPath()
only has meaning if the scheme of the Uri
is file
, and that is rather unlikely. There is no reliable means of getting a filesystem path for an arbitrary Uri
, for the simple reason that the Uri
does not have to point to a file.
理想情况下,您的上传到服务器"逻辑可以与InputStream
一起使用.在这种情况下,请在ContentResolver
上调用openInputStream()
以获取由Uri
标识的内容上的InputStream
.如果您的上传到服务器"逻辑仅适用于文件,请使用InputStream
将该内容复制到您控制的某个临时文件中(例如,在getCacheDir()
中),然后使用该临时文件进行上传.完成后,删除该临时文件.
Ideally, your "upload to a server" logic can work with an InputStream
. In that case, call openInputStream()
on a ContentResolver
to get an InputStream
on the content identified by the Uri
. If your "upload to a server" logic only works with files, use that InputStream
to copy the content to some temporary file that you control (e.g., in getCacheDir()
), then use that temporary file for your upload. Delete the temporary file when you are done with it.
这篇关于从Android中的图像获取uri的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!