安卓中的地理标记

8

如何通过代码知道安卓相机设置中是否启用了地理标记?我们通过代码将地理标记附加到照片上。我们使用Location Manager和Location Listener获取纬度和经度,并使用Exif接口将这些坐标保存到照片中。

ExifInterface exif = new ExifInterface(/sdcard/photo/photoname.jpg);
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,String.valueOf(latitudeValueInDecimal));
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE,String.valueOf(longitudeValueInDecimal));
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF,"N");
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF,"W");
exif.saveAttributes();

当相机设置中启用地理标记时,我们只需向照片添加GPS坐标(纬度和经度)?那么如何检查相机设置中地理标记(存储位置)的状态?我正在使用HTC Wildfire S手机。


请参考以下链接的问题:https://dev59.com/9lnUa4cB1Zd3GeqPbIbm - Anup Cowkur
可能是如何在Android中以编程方式获取当前GPS位置?的重复问题。 - AnhSirk Dasarp
1个回答

2

你无法通过编程来检查。如果标签为空,则必须手动读取所拍照片的标签并检查GPS坐标,以确定是否禁用了地理标记。

您可以使用ExifInterface类从JPEG图像中读取EXIF元数据。这是官方文档链接,解释了此内容:

http://developer.android.com/reference/android/media/ExifInterface.html

以下是可用于读取标签的示例代码:

Bundle bundle = getIntent().getExtras();

if (null != bundle) {
    String filepath = bundle.getString(FILE_PATH_KEY);

    try {
        ExifInterface exif = new ExifInterface(filepath);
        StringBuilder builder = new StringBuilder();

        builder.append("Date & Time: " + getExifTag(exif, ExifInterface.TAG_DATETIME) + "\n\n");
        builder.append("Flash: " + getExifTag(exif, ExifInterface.TAG_FLASH) + "\n");
        builder.append("Focal Length: " + getExifTag(exif, ExifInterface.TAG_FOCAL_LENGTH) + "\n\n");
        builder.append("GPS Datestamp: " + getExifTag(exif, ExifInterface.TAG_FLASH) + "\n");
        builder.append("GPS Latitude: " + getExifTag(exif, ExifInterface.TAG_GPS_LATITUDE) + "\n");
        builder.append("GPS Latitude Ref: " + getExifTag(exif, ExifInterface.TAG_GPS_LATITUDE_REF) + "\n");
        builder.append("GPS Longitude: " + getExifTag(exif, ExifInterface.TAG_GPS_LONGITUDE) + "\n");
        builder.append("GPS Longitude Ref: " + getExifTag(exif, ExifInterface.TAG_GPS_LONGITUDE_REF) + "\n");
        builder.append("GPS Processing Method: " + getExifTag(exif, ExifInterface.TAG_GPS_PROCESSING_METHOD) + "\n");
        builder.append("GPS Timestamp: " + getExifTag(exif, ExifInterface.TAG_GPS_TIMESTAMP) + "\n\n");
        builder.append("Image Length: " + getExifTag(exif, ExifInterface.TAG_IMAGE_LENGTH) + "\n");
        builder.append("Image Width: " + getExifTag(exif, ExifInterface.TAG_IMAGE_WIDTH) + "\n\n");
        builder.append("Camera Make: " + getExifTag(exif, ExifInterface.TAG_MAKE) + "\n");
        builder.append("Camera Model: " + getExifTag(exif, ExifInterface.TAG_MODEL) + "\n");
        builder.append("Camera Orientation: " + getExifTag(exif, ExifInterface.TAG_ORIENTATION) + "\n");
        builder.append("Camera White Balance: " + getExifTag(exif, ExifInterface.TAG_WHITE_BALANCE) + "\n");

        builder = null;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我们应用程序的功能是启用地理标记。但是在连续拍照时,有些照片没有附加地理标记。我们在1或2个手机上进行了测试并确认了这一点。即使启用了地理标记,地理标记也无法附加到照片上?那么在这种情况下该怎么办? - Praveen
在我们的应用程序中,我们使用相机意图来拍照。Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, Constants.ACTION_IMAGE_CAPTURE); - Praveen
你需要详细调试这个问题。首先,每次附加地理标签时,请将它们打印到logcat中并检查它们是否已经为每张照片附加。然后获取每张照片的标签并将它们也打印到logcat中。这将有助于定位错误。 - Anup Cowkur
在应用程序中,我们使用相机意图拍照。我们需要连续拍照并使用EXIF接口读取地理标记,并在列表视图中显示它。但问题是,对于某些照片,地理标记丢失了。后来我们发现,“连续拍照”在中途未能附加某些照片的地理标记。因此,我们计划为那些没有地理标记的照片编写程序来附加地理标记。照片没有地理标记,原因可能是1)相机设置中禁用了地理标记功能,或者2)地理标记未能与照片一起附加。那么我们该怎么办呢? - Praveen
如果用户禁用了地理标记,则相机图像将不会有地理标记。在这种情况下,每次图像进入时,使用我上面告诉你的方法检查它是否具有地理标记。如果没有,则向用户显示对话框,要求允许地理标记并重新运行应用程序。 - Anup Cowkur
让我们在聊天中继续这个讨论 - Praveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接