Android中要想实现短信拦截功能,要在AndroidManifest.xml文件中添加接收短信的权限,如下:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
Android系统要想拦截短信,要使用广播接收器,所以要编写一个类实现短信拦截功能,这个类要继承BroadcastReceiver,并重写onReceive()方法,在这个方法中进行具体的拦截操作,代码如下:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;
public class SMSMonitor extends BroadcastReceiver {
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent)
{
if(intent!=null && intent.getAction()!=null && ACTION.compareToIgnoreCase(intent.getAction())==0)
{
Object[]pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] messages = new SmsMessage[pduArray.length];
for (int i = 0; i<pduArray.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pduArray [i]);
Log.d("SMSMonitor", "短信来自: " + messages[i].getOriginatingAddress());
Log.d("SMSMonitor", "短信内容: " + messages[i].getMessageBody());
if("1008".equals(messages[i].getOriginatingAddress())){//如果短信发送者是1008则拦截,这里就可以进行具体的操作了
this.abortBroadcast();//结束广播发给别的程序,这样系统就不会收到短信广播
}
}
Log.d("SMSMonitor","SMS");
}
}
}
AndroidManifest.xml文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sms"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="SMSMonitor" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
解释:<intent-filter android:priority="1000">设置这个接收器的优先级高于系统的其它短信的接收器,以使自己接收到SMS优先于系统或其它软件
交流探讨到我的新浪微博:http://weibo.com/tianrui1990
欢迎关注技术分享微信公众号:JavaQ