短信拦截

1.

在manifest.xml加入短信发送,接收的权限

<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.READ_SMS"/>

2.

在程序中接收短信广播。import android.app.Activity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class Test0805Activity extends Activity {
    /** Called when the activity is first created. */

    private StringBuffer sb;
    private TextView text;
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text = (TextView) findViewById(R.id.text);
        //注册监听器
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        filter.setPriority(Integer.MAX_VALUE);
        this.registerReceiver(receiver, filter);
    }

    public BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Log.i("msg", intent.getAction());
            if (intent != null && intent.getAction() != null
                    && ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
                //提取短信内容
                Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
                SmsMessage[] messages = new SmsMessage[pduArray.length];
                sb = new StringBuffer(5000);
                for (int i = 0; i < pduArray.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
                    Log.i("sms1", messages[i].getOriginatingAddress());
                    Log.i("sms1", messages[i].getMessageBody());
                    sb.append(messages[i].getMessageBody());
                    Toast.makeText(context, messages[i].toString(), Toast.LENGTH_SHORT).show();
                }
                Log.i("sms1", "sms message received");
                Log.i("msg", sb.toString());
                getMessage(sb.toString());
            }
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

}

 

可以调用intent.getExtras().get("pdus")提取出SmsMessage.此调用返回一个PDU模式中定义的对象数组,PDU是一种表示SMS小小的行业标准方式。然后可以讲PDU转换为android SmsMessage对象,代码如onReceive()所示。可以看到,以对象数组的形式从intent获取PDU,然后构造SmsMessage对象数组,其大小和PDU数组大小相等。最后,对PDU数组进行迭代,调用SmsMessage.createFromPdu((byte[]) pduArray[i])来从PDU创建SmsMessage对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值