android 获取图片位置信息

Android获取图片位置信息
一.需要权限
1)Android 9以及以下
1.需要获取所有文件权限 READ_EXTERNAL_STORAGE
2) Android 12 以及以下
1.需要获取所有文件权限 READ_EXTERNAL_STORAGE
2.需要获取读取media位置权限 ACCESS_MEDIA_LOCATION
3) Android 13
1.需要获取图片读取权限 READ_MEDIA_IMAGES
2.需要获取读取media位置权限 ACCESS_MEDIA_LOCATION
4)Android 14
1.需要获取图片读取权限或者部分文件读取权限
READ_MEDIA_IMAGES 或者READ_MEDIA_VISUAL_USER_SELECTED
2.需要获取读取media位置权限 ACCESS_MEDIA_LOCATION
二.怎么获取
1)ExifInterface获取方式
1.文件ExifInterface(File file)
2.文件名ExifInterface(String filename)
3.文件描述符ExifInterface( FileDescriptor fileDescriptor)
4.输入流ExifInterface(InputStream inputStream)
5.指定类型输入流ExifInterface(InputStream inputStream,int streamType)
2)获取信息
exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE)
TAG_GPS_LATITUDE :指示纬度。
TAG_GPS_LATITUDE_REF :指示纬度是北纬还是南纬。
TAG_GPS_VERSIONID :指示 GPS Info IFD 的版本。
TAG_GPS_LONGITUD_EREF : 指示经度是东经还是西经。
TAG_GPS_TIMESTAMP : 将时间指示为 UTC(协调世界时)。
TAG_GPS_LONGITUDE : 指示经度。
TAG_GPS_DATESTAMP : 记录相对于 UTC(协调世界时)的日期和时间信息
TAG_GPS_IMG_DIRECTION : 指示捕获图像时图像的方向。
TAG_GPS_IMG_DIRECTION_REF : 指示在捕获图像时给出图像方向的参考。
三.坐标转换

/**
     * 将 112/1,58/1,390971/10000 格式的经纬度转换成 112.99434397362694格式
     * @param string 度分秒
     * @return 度
     */
    private fun coordinateTransformation(string: String?): Double {
        var dimensionality = 0.0
        if (null == string) {
            return dimensionality
        }
        //用 ,将数值分成3份
        val split = string.split(",".toRegex()).dropLastWhile { it.isEmpty() }
            .toTypedArray()
        for (i in split.indices) {
            val s = split[i].split("/".toRegex()).dropLastWhile { it.isEmpty() }
                .toTypedArray()
            //用112/1得到度分秒数值
            val v = s[0].toDouble() / s[1].toDouble()
            //将分秒分别除以60和3600得到度,并将度分秒相加
            dimensionality = dimensionality + v / Math.pow(60.0, i.toDouble())
        }
        return dimensionality
    }

四:注意
1).ACCESS_MEDIA_LOCATION 权限没有弹窗只需要请求就可以

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值