`

开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录)

阅读更多

首先声明者只是一个个人开发的个人使用的小程序,本意是为了防止手机被盗而写的,由于程序需要在不为人知的情况下采集信息然后发送,所以程序没有界面。整个程序的大概思路是这样的

手机开始时:

1、获取手机联系人信息、通话记录、手机号码

2、检查手机gps状态:关闭状态则开启 ,然后获取手机的所在地

3、检查手机网络开关,关闭则开启

4、将采集的信息发送到指定邮箱中(本文以qq邮箱实现,由于代码太多这里就不贴出来了,有需要的联系我)

5、手机网络还原到初始状态、关闭gps(尚未实现,有实现的朋友可以一起研究一下)

添加权限

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
 <uses-permission android:name="android.permission.READ_CONTACTS" />
 <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

 <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>

 

下面我们就按部就班来实现我们的想法:

1、获取联系人、电话号码、通话记录:

/**
 * 获取本机号码
 * @param context
 * @return
 */
 public static String getLocalNumber() {
  TelephonyManager mTelephonyMgr;
  mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
  return mTelephonyMgr.getLine1Number();
 }

 /**
  * 获取联系人
  * @param context
  * @return
  */
 public static  String getContact(){
  ContentResolver cr = context.getContentResolver();    
  //取得电话本中开始一项的光标  
  Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);  
  String string ="";
  while (cursor.moveToNext())  
  {  
      // 取得联系人名字  
     int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);  
      String name = cursor.getString(nameFieldColumnIndex);  
      string += ("联系人:"+name+", 电话号码:");  
      // 取得联系人ID  
      String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
      Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,       ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " 
              + contactId, null, null);  
   
      // 取得电话号码(可能存在多个号码)  
      int i=0;
      while (phone.moveToNext())  
      {  
          String strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));  
          if(i==0){
             string += (strPhoneNumber);    
          }else{
             string += ("," + strPhoneNumber);    
          }
       
          i++;
      }  
      string += "\n";  
      phone.close();  
      System.out.println("persion:"+string);
  }  
  cursor.close();
  return string;
 }

 

 

/**

*获取通话记录

*/

public static List<Call> getCallList() {
  List<Call> callList = new ArrayList<Call>();
  int type;
  Date date;
  String time = "";
  String telName = "";
  String telNo = "";

  ContentResolver cr = context.getContentResolver();
  final Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI,
    new String[] { CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME,
      CallLog.Calls.TYPE, CallLog.Calls.DATE,
      CallLog.Calls.DURATION }, null, null,
    CallLog.Calls.DEFAULT_SORT_ORDER);
  for (int i = 0; i < cursor.getCount(); i++) {
   Call call = new Call();
   cursor.moveToPosition(i);
   telName = cursor.getString(1);
   telNo = cursor.getString(0);
   type = cursor.getInt(2);
   SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   date = new Date(Long.parseLong(cursor.getString(3)));
   time = sfd.format(date);
   // call.setLongTime(formatDuring(Long.valueOf(cursor.getString(4))));
   // String callDate = getdays(Long.parseLong(cursor.getString(3)));
   if (telName != null) {
    call.setName(telName);
   } else {
    call.setName("未知联系人");
   }
   call.setNumber(telNo);
   call.setTime(time);

   if (CallLog.Calls.INCOMING_TYPE == type) {
    call.setType("接听");
   } else if (CallLog.Calls.OUTGOING_TYPE == type) {
    call.setType("拨出");
   } else if (CallLog.Calls.MISSED_TYPE == type) {
    call.setType("未接");
   }
   callList.add(call);
  }
  return callList;
 }

 private String formatDuring(long mss) {
  long hours = mss / (60 * 60);
  long minutes = (mss % (1000 * 60 * 60)) / 60;
  long seconds = (mss % (1000 * 60));
  return hours + ":" + minutes + ":" + seconds;
 }

 private String getdays(long callTime) {
  String value = "";
  long newTime = new Date().getTime();
  long duration = (newTime - callTime) / (1000 * 60);
  if (duration < 60) {
   value = duration + "分钟前";
  } else if (duration >= 60 && duration < DAY) {
   value = (duration / 60) + "小时前";
  } else if (duration >= DAY && duration < DAY * 2) {
   value = "昨天";
  } else if (duration >= DAY * 2 && duration < DAY * 3) {
   value = "前天";
  } else if (duration >= DAY * 7) {
   SimpleDateFormat sdf = new SimpleDateFormat("M月dd日");
   value = sdf.format(new Date(callTime));
  } else {
   value = (duration / DAY) + "天前";
  }
  return value;
 }

 

/**

*实体类

*/

public class Call {
 private String name;
 private String number;
 private String time;
 private String type;

}

分享到:
评论
5 楼 ygswine 2012-07-18  
最后一点是否可以在发送QQ邮箱,成功后程序关闭,在Activity的destroy方法中进行关闭网络,和GPS状态
4 楼 mvpstevenlin 2012-05-15  
博主,麻烦发一份我学习吧 1577360984@qq.com,非常谢谢!
3 楼 lyltiger 2012-03-26  
876160561@qq.com谢谢
2 楼 wushaomei1988 2012-03-22  
您好 能给我一份源码吗。 675399038@qq.com  谢谢哦
1 楼 cjb7625 2011-12-03  
android真难学,我的毕业设计就是做一个手机防盗软件,没想到居然破天荒地看到一个这样的代码,难得!!!!如果方便发我一份源码我研究下,370874319@qq.com,非常感谢!

相关推荐

    服务器开机自动发送短信到手机

    服务器开机自动发送短信到手机! reg add hkcu\software\microsoft\windows\currentversion\run /v feixin /t reg_sz /d c:\windows\feixin.bat /f :: sno 为自己的手机号;psw 为飞信密码 ;msg 为消息 set sno=...

    GSM短信接收发送模块使用说明书

    * 报警电话设置:预存代码 A、B、C、D、E、F、G、H、I、J(可存 10 组手机号码)用户管理员手机号码编辑短信发送到系统的 SIM 卡号码。 * 删除接警电话:代码 X 删除除管理员手机号码外的所有接警号码。 * 修改...

    自动上报本地公网IP到指定邮箱

    2)当公网IP变化时或定时时间到时自动发送邮件到指定邮箱。3)可以设置发送邮箱账号、接收邮箱账号及密码。SMTP服务器及端口号可设置。支持QQ、163等主流SMTP服务器。4)支持普通SMTP(25端口)及SSL SMTP(465端口...

    安卓短信彩信相关相关-防止手机丢失开机自启检测sim卡是否为原来那张不是则想一个号码发送短信.rar

    标题中的"安卓短信彩信相关相关-防止手机丢失开机自启检测sim卡是否为原来那张不是则想一个号码发送短信.rar"是一个针对这个问题的解决方案。这个压缩包文件包含了可能用于创建一个安全应用的源代码,该应用会在设备...

    用单片机控制手机收发短信息

    系统可以预先配置好短消息服务中心地址和服务号码,然后按照预定时间间隔自动构建并发送PDU数据包,从而实现数据的远程传输。 #### 六、总结 本文详细介绍了使用MCS-51系列单片机控制手机收发短信息的原理、硬件...

    小米手机电源键坏使用电脑开机

    以下将详细介绍如何在电源键损坏的情况下,通过电脑程序实现小米手机的开机。 首先,我们需要理解这个过程的核心原理。手机与电脑之间的通信通常依赖于USB数据线,通过USB调试模式,电脑可以识别并控制手机的部分...

    电信设备-手机短信发送方法.zip

    6. 送达:当收件人的手机在服务区并且开机时,短信中心会将短信传送到手机上。 三、短信发送技术细节 1. SMS协议:短信服务基于SMPP(Short Message Peer-to-Peer)协议,这是一种应用层协议,用于系统间的消息...

    Android 攻破360手机卫士的短信拦截开机启动等服务.rar

     隐私空间:可以设置保密的联系人,与保密联系人之间的短信与通话记录就会被加密起来。  题外话:在研究开机启动的时候,是在开机启动广播中结束360进程,然后自己创建动态广播,结果,测试时发现安装测试程序后,...

    python监控电脑 定时截屏上传到指定邮箱

    加入开机运行,便可在后台监控电脑 定时截屏上传到指定邮箱

    MTK 7.1 定时发送短信

    【MTK 7.1 定时发送短信】功能是在短信应用中添加了一项创新性的服务,允许用户预先设定短信的发送时间,从而在指定的时刻自动发送短信。这一特性对于那些希望在特定时间(如生日、纪念日或重要会议之前)发送消息的...

    365手机通讯秘书.zip

    分析短信内容,若包含敏感词则屏蔽,保存垃圾短信到垃圾箱中(设计一个垃圾短信的数据库,除了_id外,还包含手机号和短信内容,垃圾短信的收件时间三个字段)。 ①垃圾箱(垃圾箱表)(读取数据库中的信息,用...

    自启动发送指定信息到邮箱示例

    在IT领域,自启动发送指定信息到邮箱的功能通常用于自动化监控、日志报告或系统报警。这个示例涉及几个关键知识点,包括自启动程序、网络连接检测、IP地址获取以及邮件发送。以下是对这些知识点的详细说明: 1. **...

    手机开机动画

    本文将深入探讨如何更改手机的开机动画,并介绍与安卓手机开机动画相关的知识点。 首先,了解开机动画的工作原理至关重要。在手机启动时,系统加载引导程序,接着是内核,然后是操作系统。开机动画就是在操作系统...

    手机防盗软件实现(源码)

    3.每次开机程序自动运行,检测到别人如果使用你的手机,自动把他的通话记录,跟gps坐标发送到绑定好的手机号上。 4.知道用你手机人的手机号,最近通话记录,gps坐标后,再自己想办法找到这人吧。 具体代码 1.取sim...

    老年人用智能手机教程.ppt

    5. **发短信**:在主界面进入短信应用,选择或输入收件人电话,编写短信内容,选择发送。可使用语音输入、切换输入法、插入表情等功能。 6. **拍照片**:打开相机应用,可以调整设置,点击拍照按钮进行拍摄,还可以...

    s40手机定时发信息

    在这款手机上实现“定时发送信息”是一项非常贴心的功能,它允许用户预先设定好短信内容和发送时间,到指定时间后手机会自动发送出去,这对于忙碌的用户或者想在特定时间表达心意的人尤为方便。下面我们将详细探讨这...

    安卓手机开机画面

    【安卓手机开机画面】是指手机启动时显示的动画效果,它是用户首次接触手机系统时的视觉体验之一。在安卓系统中,开机画面可以通过修改特定的文件来定制,以展现个性化或者品牌特色。在这个案例中,我们关注的是为...

    Android手机刷机失败无法开机自救大法.pdf

    Android手机刷机失败无法开机自救大法 本文主要讲述了Android手机刷机失败无法开机的自救方法。对于经常刷机的Android用户来说,难免会碰到刷机失败损坏recovery程序乃至手机无法启动的情况,也就是传说中的手机变...

Global site tag (gtag.js) - Google Analytics