目前,我正在从图库中获取图像,并使用它填充imageField。我试图从图像中提取位置信息,假设它存在,但我得到的只是空值。
我知道我正在测试的图像在其EXIF数据中包含纬度和经度条目。
我已经尝试了我在网上找到的所有内容,但没有任何工作。我认为问题在于将不正确的参数发送到ExifInterface。这就是我现在所拥有的:
...
else if (requestCode == REQUEST_IMAGE_FROM_GALLERY) {
try {
Uri selectedImage = data.getData();
String currentImage = selectedImage.getPath()
+ File.separator + getFileName(selectedImage);
....
然后初始化ExifInterface:
....
try {
ExifInterface ei = new ExifInterface(currentImage);
imageLatitude = ei.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
imageLongitude = ei.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
....
但是imageLatitude和imageLongitude返回null。我甚至将发送到ExifInterface中的参数替换为图像的完整路径(/storage/emulated/0/DCIM/Camera/IMG_20150119_170010.jpg
),但仍然获得空值。
究竟应该传递给ExifInterface,如果我传入正确的参数,为什么我会得到空值?
答案 0 :(得分:1)
我最终使用这种方法让它工作:
private String getRealPathFromURI(Uri contentURI, Activity activity) {
Cursor cursor = activity.getContentResolver()
.query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file
// path
return contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
}
请在此处查看:
if (requestCode == REQUEST_IMAGE_FROM_GALLERY) {
try {
Uri selectedImage = data.getData();
String currentImageFile = getRealPathFromURI(selectedImage, this);
ExifInterface ei = new ExifInterface(currentImageFile);
这提供了一个合适的ExifInterface,允许我从图像中提取所需的数据(它存在的位置)。
感谢大家的投入。
答案 1 :(得分:0)
您传递给ExifInterface的图像路径可能无效,您可以使用以下代码进行检查:
File file = new File(currentImage);
if(file.exists()){
// print file exist
}else{
// print file not exist.
}
如果是问题,您可以通过传递有效的图像路径来解决它。如果不是问题,您可以通过在以下代码之前添加断点来调试代码并查看ExifInterface ei
对象中的属性:
imageLatitude = ei.getAttribute(ExifInterface.TAG_GPS_LATITUDE);