由于最近公司在做手机信息采集项目,做得很吃力,效果也不理想。

加上今天负能量较多,谢谢一些近日搜索回来的安卓手机经验。

1.目标

在PC端程序获取手机中的各种信息,主要通讯录、短信息、通话记录等

2.过程

(1)开发环境:由于在PC端是无法直接通过ADB接口直接获取手机中的通讯录等信息的,所以花了些时间重新拿起JAVA。用起来真的非常不习惯,包括环境部署,项目建立,基本流程都一头雾水。通过在csdn下载了一些android开发教学视频手把手的部署了环境,并看了一些基本的开发流程,花了一天时间,大概能做出个小程序在手机上运行了。

(2)获取思路:android开发环境搭建好了之后,开始考虑如何获取手机中的各项信息。由于对android开发不熟悉,所以在获取信息的方法也都是在网上搜索寻找合适的调用方法并稍作修改。主要三项,通讯录、短信息、通话记录。

public List<String[]> getThjl(){List<String[]> listThjl=new ArrayList<String[]>();Date date;String time= "";final Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, new String[]{CallLog.Calls.NUMBER,CallLog.Calls.CACHED_NAME,CallLog.Calls.TYPE, CallLog.Calls.DATE}, null, null,CallLog.Calls.DEFAULT_SORT_ORDER);for (int i = 0; i < cursor.getCount(); i++) {  String[] thjlItem=new String[4];cursor.moveToPosition(i);thjlItem[0]=cursor.getString(0);thjlItem[1]=cursor.getString(1);thjlItem[2]=cursor.getString(2);listThjl.add(thjlItem);SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");date = new Date(Long.parseLong(cursor.getString(3)));time = sfd.format(date);thjlItem[3]=time;}return listThjl;}public List<String[]> getSmsInPhone() {final String SMS_URI_ALL = "content://sms/";List<String[]> MsgList=new ArrayList<String[]>();try {Uri uri = Uri.parse(SMS_URI_ALL);String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" };Cursor cur = getContentResolver().query(uri, projection, null, null, "date desc");     // 获取手机内部短信if (cur.moveToFirst()) {int index_Address = cur.getColumnIndex("address");int index_Person = cur.getColumnIndex("person");int index_Body = cur.getColumnIndex("body");int index_Date = cur.getColumnIndex("date");int index_Type = cur.getColumnIndex("type");do {String[] msgItem=new String[5];String strAddress = cur.getString(index_Address);int intPerson = cur.getInt(index_Person);String strbody = cur.getString(index_Body);long longDate = cur.getLong(index_Date);int intType = cur.getInt(index_Type);SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");Date d = new Date(longDate);String strDate = dateFormat.format(d);String strType = "";if (intType == 1) {strType = "接收";} else if (intType == 2) {strType = "发送";} else {strType = "null";}msgItem[0]=strAddress;msgItem[1]=intPerson+"";msgItem[2]=strbody;msgItem[3]=strDate;msgItem[4]=strType;MsgList.add(msgItem);} while (cur.moveToNext());if (!cur.isClosed()) {cur.close();cur = null;}} } catch (SQLiteException ex) {Log.d("SQLiteException in getSmsInPhone", ex.getMessage());}return MsgList;}private List<HashMap<String, String>> getGxr() {List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();Cursor cur = null;try {cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);if (cur.moveToFirst()) {int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);do {String contactId;String displayName;String phoneNumber = "";contactId = cur.getString(idColumn);displayName = cur.getString(displayNameColumn);int numberCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));if (numberCount>0) {Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId ,null, null);if (phones.moveToFirst()) {int numberColumn = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);do {phoneNumber += phones.getString(numberColumn) + ",";} while (phones.moveToNext());} }HashMap<String, String> i = new HashMap<String, String>();i.put("name", displayName);i.put("key", phoneNumber);items.add(i);} while (cur.moveToNext());} else {HashMap<String, String> i = new HashMap<String, String>();i.put("name", "Your Phone");i.put("key", "Have No Contacts.");items.add(i);}}catch( Exception ex ){String exMsg=ex.getMessage();new AlertDialog.Builder(MainActivity.this).setMessage("异常:"+exMsg).setPositiveButton("确定", null).show(); } finally {if (cur != null)cur.close();}return items;
}

在自己开发的apk程序中可以获取到信息后,开始考虑如何与PC通讯传送到PC。开始在网上搜索了一些方法都是说socket通讯来实现,但由于没有socket使用的经验,还是自己想了一个简单的方法来实现数据交换。

首先把自己开发的apk包通过ADB推送到目标手机安装,并通过ADB启动该程序,该程序启动后自动获取手机信息,并以写文件形式生成XML文件在手机上。而在PC端程序在启动该程序后是无法获知该程序的运行状态的,所以PC程序就还是通过ADB不断判断监测手机端指定路径下的XML文件是否生成。如果生成了,则通过ADB拷贝的本地PC并解析获取数据(当然如果apk程序运行报错也可以通过写文件形式交换错误信息给PC端)。个人觉得通过该方式交换数据速度会较快,但状态却增加了不可控,有改进空间。

附ADB解疑:adb.exe,做过安卓开发应该都了解,是安卓手机与pc通讯的一个程序。只有手机开启调试模式,并且PC安装好驱动后,在设备管理器中显示为后,才可使用ADB通讯(包括APK安装,文件拷贝推送等)。

使用到的CMD命令:

1.安装自己的apk包: adb install "d:/xx.apk"

2.启动自己的程序: adb shell am start -n com.xdh.xdhandroid/com.xdh.xdhandroid.MainActivity(后半部分为  apk命名空间/apk程序名)

3.从手机拷贝XML文件到PC端: adb pull /sdcard/XX.xml "d:/xx.xml"
基本流程就这样,算是这几天研究的成果吧。PS:vs与eclipse交换着用真不习惯,快捷键截然不同。

安卓手机各种信息获取---(通讯录短信息通话记录)相关推荐

  1. 【Android工具】更新安卓手机传感器信息获取工具Ampere Castro phyphox,轻松获取硬件数据和状态信息...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 上次分享过一个安卓手机传感器信息获取工具--Castro(本文下边),这个软件没有充电 ...

  2. android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...

    [实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...

  3. 获取通讯录、通话记录、短信

    获取通讯录: private ArrayList<String> getPhoneNum(Context context) {ArrayList<String> numList ...

  4. 安卓手机怎么关闭服务器信息,安卓手机服务器信息怎么关闭

    安卓手机服务器信息怎么关闭 内容精选 换一换 当云服务器网络异常.防火墙未放行本地远程桌面端口.云服务器CPU负载过高等场景均可能导致云服务器无法正常登录.当您的云服务器无法远程登录时,我们建议您首先 ...

  5. Android通过蓝牙获取设备的通讯录、通话记录等

    本功能实现方案流程如下: 1.在AndroidManifest文件中添加蓝牙相关权限: 2.通过静态或者动态注册广播的形式,监听蓝牙设备的状态(本文以动态监听的方式实现): 3.根据已实现广播的回调状 ...

  6. linux系统给安卓root权限,安卓手机该如何获取Root权限?方法很简单,但不建议Root...

    原标题:安卓手机该如何获取Root权限?方法很简单,但不建议Root 想要获取安卓智能手机的Root权限,现在已经是相当简单,只需要网上搜索Root精灵.Root大师.百度一键Root.360一键Ro ...

  7. Android通讯录管理(获取联系人、通话记录、短信消息)(三)

    Android通讯录管理(获取联系人.通话记录.短信消息)(三) 这是通讯录管理的最后一篇,前面两篇已经把获取联系人和通话记录解决了,短息消息就相对来说要稍微复杂那么一点.我们先来看看效果图: 源码下 ...

  8. android通讯录管理(获取联系人,通话记录,短信消息),Android通讯录管理(获取联系人、通话记录、短信消息)(二)...

    Android通讯录管理(获取联系人.通话记录.短信消息)(二) 前言:上一篇博客介绍的是获取联系人的实现,本篇博客将介绍通话记录的实现. 界面布局: /Contact_Demo/res/layout ...

  9. Python读取安卓手机GPS信息

    问题描述:使用Python读取安卓手机GPS信息,要求手机已经打开GPS. 思考一下: 1)如何在安卓手机上编写Python程序: 2)如何调用安卓系统提供的功能: 3)如何读取GPS数据. 思考上面 ...

最新文章

  1. CentOS Linux最常用命令及快捷键整理
  2. C# 接口的作用浅谈举例(转)
  3. python中unique_一个神奇的Python机器学习交互应用开放框架
  4. python 输出当前行号
  5. 使用DynamoDBMapper插入DynamoDB项目
  6. Linux下的虚拟Bridge实现
  7. android组建之间通信_android组件间通信有哪些方式
  8. 独家 | 精彩!这27本书籍,每位数据科学家都应该阅读(附说明图表)
  9. java常用开发工具大合集
  10. 用Python转码恢复乱码中文
  11. 浅析欢乐时光(HAPPY TIME)病毒
  12. 图灵机二义性_形式语言与自动机理论教学参考书(第3版)
  13. Excel如何计算年龄
  14. 提取Windows锁屏壁纸最简单的方式
  15. 【贪吃蛇C语言版源代码(推荐使用Dev-C++)——附运行截图】
  16. HDUOJ 6806 Equal Sentences
  17. 正则表达式与 re 模块[转]
  18. 用pigz来加速解压tar.gz
  19. R语言简单应用掷骰子游戏
  20. cnn kaggle仙人掌_我如何开发可识别情绪并闯入Kaggle前10名的CNN

热门文章

  1. 数据完整性、存储过程、函数
  2. OSA账户新出政策,个人SOHO该如何开离岸账户?
  3. JIRA的使用介绍(一)- 概念篇(笔记)
  4. mysql 表情符号_解决mysql存储特殊文字(表情符号)utf8mb4
  5. 如何优雅地使用Sublime
  6. mysql数据库删除tokudb表 drop table报错unknowntable处理方法【转载】
  7. LoadRunner使用教程
  8. python 使用 turtle 画双心(丘比特之箭)
  9. 第七届蓝桥杯有奖竞猜 JAVA
  10. Android天气预报 源代码,android天气预报源码(国家气象局的接口)