首先,需要读取手机本地的照片信息,可以借助ContentProvider读取本地媒体数据库来获得。
打开DDMS,在data/data/com.android.prividers.media/databases/external.db 将external.db导出到桌面查看,所有的媒体文件都存储在 files表中,打开如图:

由于我使用的是全新的模拟器,所以里边并没有媒体文件的信息。
可以看到有很多字段。
_data 媒体文件的存储路径
_size 媒体文件大小
date_added 媒体文件添加日期
date_modified 媒体文件修改日期
_display_name 媒体文件名称
latitude 媒体文件的经度信息
longitude 媒体文件的纬度信息
title 媒体文件标题
media_type 媒体文件类型 1代表图片 2代表录音 3代表视频
duration 视频文件时长
width 媒体文件宽
height 媒体文件高

下面我们就演示一下,用模拟器拍张照片。
然后重新导出external.db 查看 files 表 :

可以看到该照片的信息存储在了数据库中,但仔细查看 latitude 和 longitude 的值为null ,怎么回事呢?
仔细想想,我们没有开启gps定位权限,怎么能获取到位置信息并存储呢。然后我们打开gps定位权限,并开启相机中保存位置按钮。我使用的是模拟器,如图:

然后重新拍照,导出external.db 查看 files 表,如下,可以看到latitude 和 longitude 中都有值了。


下面就读取该数据库文件的工作了,使用到了ContentProvider
创建PhotoTest项目,代码如下:

public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn_get).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {getPhotoLocation();}});}private static final String[] SELECTIMAGES = {MediaStore.Images.Media.DATA,MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media.TITLE,MediaStore.Images.Media.DATE_ADDED,MediaStore.Images.Media.DATE_MODIFIED,MediaStore.Images.Media.LATITUDE,MediaStore.Images.Media.LONGITUDE,MediaStore.Images.Media.SIZE};private void getPhotoLocation() {ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,SELECTIMAGES,null,null,null);int i = 0;if (cursor != null) {while (cursor.moveToNext()) {String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));File file = new File(path);if (!file.exists() || !file.canRead()) continue;String name = cursor.getString(cursor.getColumnIndex( MediaStore.Images.Media.DISPLAY_NAME));String title = cursor.getString(cursor.getColumnIndex( MediaStore.Images.Media.TITLE));long addDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED));long modifyDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED));float latitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Images.Media.LATITUDE));float longitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Images.Media.LONGITUDE));long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.SIZE));i++;Log.d(TAG+i, "onCreate: "+"path:-------"+path +"\n"+"name:-------"+name +"            "+"title:------"+title+"     "+"addDate:----"+addDate+"\n"+"modifyDate:-"+modifyDate+"\n"+"latitude:---"+latitude+"    "+"longitude:--"+longitude+"       "+"size:-------"+size);}cursor.close();}}}

记得加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
运行程序,点击按钮发现刚才所有的照片都读取到了

获取视频文件方法类似:

 private static final String[] SELECTVIDEOS = {MediaStore.Video.Media.DATA,MediaStore.Video.Media.DISPLAY_NAME,MediaStore.Video.Media.TITLE,MediaStore.Video.Media.DATE_ADDED,MediaStore.Video.Media.DATE_MODIFIED,MediaStore.Video.Media.LATITUDE,MediaStore.Video.Media.LONGITUDE,MediaStore.Video.Media.SIZE,MediaStore.Video.Media.DURATION};private void getVideoLocation() {ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,SELECTVIDEOS,null,null,null);int i = 0;if (cursor != null) {while (cursor.moveToNext()) {String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));File file = new File(path);if (!file.exists() || !file.canRead()) continue;String name = cursor.getString(cursor.getColumnIndex( MediaStore.Video.Media.DISPLAY_NAME));String title = cursor.getString(cursor.getColumnIndex( MediaStore.Video.Media.TITLE));long addDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_ADDED));long modifyDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED));float latitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Video.Media.LATITUDE));float longitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Video.Media.LONGITUDE));long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));//视频时长long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));i++;Log.d(TAG+i, "onCreate: "+"path:-------"+path +"\n"+"name:-------"+name +"            "+"title:------"+title+"     "+"addDate:----"+addDate+"\n"+"modifyDate:-"+modifyDate+"\n"+"latitude:---"+latitude+"    "+"longitude:--"+longitude+"       "+"size:-------"+size+  "   "+"duration:-------"+duration);}cursor.close();}}
文件添加日期 可以使用SimpleDateFormat转化。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(1513565779);
String addTime = simpleDateFormat.format(date);

Android 获取照片位置信息相关推荐

  1. android获取当前位置经纬度,Android中通过GPS或NetWork获取当前位置的经纬度

    今天在Android项目中要实现一个通过GPS或NetWork来获取当前移动终端设备的经纬度功能.要实现该功能要用到Android Framework 中的 LocationManager 类.下面我 ...

  2. android 获取当前位置

    1. Android开发位置感知应用程序 方式: 1. GPS 定位     精确度高,仅适用于户外,严重消耗电量. 如果手机内置GPS接受模块,即使手机处于信号盲区,依然可以获取位置信息. 2. N ...

  3. Android获取当前位置(GPS和网络定位)

    1.添加定位权限 <!--定位权限--> <uses-permission android:name="android.permission.ACCESS_FINE_LOC ...

  4. iOS定位服务系列之一:获取当前位置信息

     最近的一个业务涉及地图相关的服务,由于时间比较紧,所以借鉴了网上一些大神的代码,总算是交了差.现在回想起来,当初的自己是多么的窘迫,上网查看,铺天盖地的博文,每篇都是华丽丽的几大页,功能也都能满 ...

  5. 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例

    利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...

  6. 用Python获取照片GPS信息

    用Python获取照片GPS信息 注意事项: 1.调用了百度地图的接口. 2.能够获取信息的照片是本身就带有这些信息的,只不过我们把它查出来了而已. 3.如果是微信接收到的非原图的照片.拍摄时没开定位 ...

  7. Android获取歌曲详细信息

    Android获取歌曲详细信息 一.目标 二.实现方案 三.HTML方案 四.JSON方案 五.接下来 六.Finally 在<Android实现歌词笔记构思>时,构思了如何在笔记中添加歌 ...

  8. 微信服务号开发-获取用户位置信息

    微信服务号开发-获取用户位置信息 在微信公众号开发的中,获取用户位置信息是非常常见的功能需求,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动. 下面将介绍微信服务号获取用户位置信息的 ...

  9. UNIAPP中腾讯地图选点组件和wx.getLocation配合使用,实现定位当前位置,并获取当前位置信息。

    我是用地图选点组件和wx.getLocation()接口组合起来实现定位当前位置并获取当前位置信息进行使用,大致说一下自己的实现步骤. 写的虽然粗糙,但是纯纯干货啊兄弟!!! 腾讯位置服务申请key ...

最新文章

  1. 羊皮卷的实践-第二十一章
  2. QT中使用QSettings保存应用程序配置信息
  3. OpenCV在Linux中安装
  4. BZOJ-1968: [Ahoi2005]COMMON 约数研究 (思想)
  5. react学习(5)----通过设置初始值控制页面render渲染
  6. PyTorch框架学习四——计算图与动态图机制
  7. Angular 内嵌视图、宿主视图
  8. 【剑指offer】Java版代码(完整版)
  9. model Ensemble
  10. 以上是对图像的椒盐噪声处理,在p_temp[j*wide+i]=0;这句程序中为什么要乘以wide,求解,谢谢!
  11. 【JSP简单实现购物车(书本案例代码)】
  12. matlab傅里叶光学仿真,计算傅里叶光学实现衍射图样的计算
  13. ubuntu安装JLink 驱动。终结总结
  14. Photoshop提高照片对比度的几种实用方法
  15. 大型网站架构之安全性:高安全架构
  16. thinkphp3.2.3 支付宝授权登录php
  17. 国产大飞机C919首飞成功 瑞星安全保驾护航
  18. EasyRecovery15Mac全面好用的苹果电脑数据恢复app
  19. 记一次mysql启动失败问题.
  20. Nova组件源码分析之冷迁移与Resize

热门文章

  1. HTTP(超文本传输协议)详细解析
  2. BAT、网易面试经验收集
  3. mysql里如何写日期格式_mysql 日期格式
  4. 巧用防火墙端口来禁止迅雷、BT等软件
  5. 小技巧(2):谷歌网盘容量15G不够用?不科学上网谷歌网盘下载速度太慢?试一下这个“Google teamdrive开通”+“GDIndex链接Google Drive”
  6. 片上总线Wishbone 学习(三)Wishbone互联的类型
  7. 国产web服务器系统,国产web服务器
  8. Xilinx FPGA嵌入式开发(一) - EDK及SDK部分术语
  9. oa项目经验描述_简历中项目经验模版
  10. 史上最全BigDecimal的5种进位方式:ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR,ROUND_HALF_UP,ROUND_HALF_DOWN的比较