短信拦截
2013-07-10 16:03
148 查看
当系统收到短信时,系统会对外发送一个有序广播,该广播的Intent的Action为android.provider.Telephony.SMS_RECEIVED,因此只要我们自己开发一个优先级高于系统短信接收程序的BroadcastReceiver,那么我们就可以先于系统短信接收程序而接收到广播,并可以终止广播继续传播,实现短信拦截。程序代码如下:
自定义的BroadcastReceiver(SmsReceiver):
处理短信的Activity:
该Activity只是简单的把短信内容显示在界面上,实际运用中可以根据需要自己做相应的处理(切勿用来做违反道德和法律的事)
记得在清单文件中配置receiver:
加上权限:
自定义的BroadcastReceiver(SmsReceiver):
package com.lovo.receiver; import com.lovo.activity.DealSmsActivity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; public class SmsReceiver extends BroadcastReceiver { // 当接收到短息时被触发 @Override public void onReceive(Context context, Intent intent) { // 如果是接收到短息 if (intent.getAction() .equals("android.provider.Telephony.SMS_RECEIVED")) { // 取消广播(这行代码将会让系统接受短信程序收不到短息) abortBroadcast(); StringBuilder sb = new StringBuilder(); // 接收由SMS传过来的数据 Bundle bundle = intent.getExtras(); // 判断是否有数据 if (bundle != null) { // 通过pdus可以获得接收到的所有短信消息 Object[] pdus = (Object[]) bundle.get("pdus"); // 构建短息对象array,并依据收到的对象长度来创建array的大小 SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } // 将送来的短息合并自定义信息于StringBuilder当中 for (SmsMessage message : messages) { sb.append("短息来源:"); // 获取接收短息的电话号码 sb.append(message.getDisplayOriginatingAddress()); sb.append("\n----短息内容----\n"); // 获取短信的内容 sb.append(message.getMessageBody()); } } Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); Intent intent1 = new Intent(context, DealSmsActivity.class); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent1.putExtra("sms", sb.toString()); context.startActivity(intent1); } } }
处理短信的Activity:
package com.lovo.activity; import com.guyun.smsreceiver.R; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class DealSmsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.deal_sms); TextView show = (TextView) findViewById(R.id.deal_sms_tv); show.setText(getIntent().getStringExtra("sms")); } }
该Activity只是简单的把短信内容显示在界面上,实际运用中可以根据需要自己做相应的处理(切勿用来做违反道德和法律的事)
记得在清单文件中配置receiver:
<receiver android:name="com.lovo.receiver.SmsReceiver" > <intent-filter android:priority="900" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
加上权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
相关文章推荐
- Android利用广播拦截短信
- android 编写拦截拦截短信的service
- 短信接收拦截
- Android广播拦截短信并回调处理
- Android -- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短信拦截
- Android安卓电话拦截及短信过滤
- Android 来电(包括铃声),短信拦截的实现方法
- Android 拦截短信配置
- Android开发——短信电话拦截/接听电话
- Andriod 拨打电话、读取、拦截短信及发送短信
- 关于拦截短信被其他软件如360先拦…
- android短信拦截
- 短信拦截
- 短信与电话的拦截
- android 短信拦截
- android手机短信拦截的实现
- 好像是拦截短信的
- android 使用广播接收者监听短信和拦截外拨电话
- Android中如何在QQ通讯录,360之前拦截短信
- Android终止广播实现短信拦截