下面我附上自己做的这个拦截器的代码供大家参考。
main.xml layout
Java代码
- <?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:
Java代码
- 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:
Java代码
- <?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类用作拦截信息。
Java代码
-
-
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"); -
} -
-
public void onReceive(Context context, Intent intent) {
Log.v("TAG", ">>>>>>>onReceive start>>>>>>>");
StringBuilder body = new StringBuilder();// 短信内容
StringBuilder number = new StringBuilder();// 短信发件人
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] _pdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[_pdus.length];
for (int i = 0; i < _pdus.length; i++) {
message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
}
for (SmsMessage currentMessage : message) {
body.append(currentMessage.getDisplayMessageBody());
number.append(currentMessage.getDisplayOriginatingAdd ress());
}
String smsBody = body.toString();
String smsNumber = number.toString();
if (smsNumber.contains("+86")) {
smsNumber = smsNumber.substring(3);
}
Log.v("TAG", "smsBody=" + smsBody + " smsNumber=" + smsNumber);
// 确认该短信内容是否满足过滤条件
if (smsNumber.equals("15555215554")) {// 屏蔽发来的短信
this.abortBroadcast();
Log.v("TAG", "sms_number.equals(15555215554)");
}
}
} - }
这样一个短信拦截器就做好了。