短信拦截器:
今天利用广播机制做了一个短信拦截器。在我做的这个拦截器中,可以有两种方式来设置拦截,一种是在AndroidManifest.xml直接设置拦截,另外一种是通过手动注册来设计拦截。在这里我们需要通过查文档找到短信收发的一些权限。
下面我附上自己做的这个拦截器的代码供大家参考。
main.xml:
首页显示的SmsListenerActivity:
如果是利用手动的来注册拦截,那么就不需要在AndroidManifest.xml中设置recevier了。不过利用手动的来设置拦截,那就和做的这个拦截器的需要不相符了,这里我只是为了更加明显的说明广播的机制。
AndroidManifest.xml:
SmsRecevier类用作拦截信息:
今天利用广播机制做了一个短信拦截器。在我做的这个拦截器中,可以有两种方式来设置拦截,一种是在AndroidManifest.xml直接设置拦截,另外一种是通过手动注册来设计拦截。在这里我们需要通过查文档找到短信收发的一些权限。
下面我附上自己做的这个拦截器的代码供大家参考。
main.xml:
<?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 cn.yj3g.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="cn.yj3g.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 cn.yj3g.SmsListener;
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("5556", null, sendContent, null,
null);// 转发给5556
Log.v("TAG", sendContent);
}
}
}
}