2017-04-01 73 views
0

我想从使用android.media.ExifInterface库的地理标记图像检索经度和纬度值。但是,尽管图像是地理标记的,getLatLong总是返回false。这是我的代码:getLatLong总是返回false

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button galleryButton = (Button) findViewById(R.id.galleryButton); 

    galleryButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(pickPhoto , 1); 


     } 

    }); 


} 


protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 

    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
     case 0: 
      if(resultCode == RESULT_OK){ 
       Uri selectedImage = imageReturnedIntent.getData(); 
       ExifInterface exif = new ExInterface(selectedImage.getPath()); 
       float[] latlong = null; 
       bool result = exif.getLatLong(latlong); 


      } 

      break; 

    } 
} 

正如你所看到的,我初始化EXIF对象从返回的URI路径,它包含像“/外部/图像/媒体/ 2330”的路径。当我调用getLatLong时,它总是返回false。我也尝试了this page的示例,但仍然无效。任何帮助,将不胜感激。

银河S6边缘 的Android SDK版本25

回答

1

getPath()仅适用于一个Urifile方案。你有一个content计划。另外,您正在使用带有安全缺陷的ExifInterface

com.android.support:exifinterface:25.3.1库添加到您的dependencies

接下来,将您的android.media.ExifInterface进口替换为android.support.media.ExifInterface

然后,替换:

ExifInterface exif = new ExInterface(selectedImage.getPath()); 

有:

ExifInterface exif = new ExifInterface(getContentResolver().openInputStream(selectedImage)); 
+0

谢谢!它完美的工作! – user30646