短信监听 接收短信 发送短信 SMS监听

来源:互联网 发布:windows电脑登录微信 编辑:程序博客网 时间:2024/04/29 14:27

activity_main中只有两个TextView  非常简单的布局,所以就不在这里给出了 亲~

 

public class MainActivity extends Activity {
 
     TextView receivenum;
     TextView receivemsg;


     SmsReceiver smsReceiver;
 
     private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        receivenum = (TextView) findViewById(R.id.receivenumber);
        receivemsg = (TextView) findViewById(R.id.receivemsg);

        smsReceiver = new SmsReceiver();

  
  SMSControl.getInstance().setSmsReceiveListener(new SmsReceiveListener() {
   @Override
   public void onReceiveMessage(String telNum, String msg) {
    // TODO Auto-generated method stub
    Log.i("xxx", "sms we go");

    //拦截到得短信会在这里显示,如果在这里接着调用下面SMSControl类中发短信的方法可以将拦截到得短信发送到指定的号码上
    receivenum.setText(telNum);
    receivemsg.setText(msg);
   }
  });
        
        
    }

    @Override
    protected void onResume() {
     // TODO Auto-generated method stub
     super.onResume();

  //注册广播接收器
  IntentFilter intentFilter = new IntentFilter();
  intentFilter.addAction(ACTION);

//设置优先级,比系统先接收到消息。可以接着停止广播使系统接收不到短消息
  intentFilter.setPriority(900);
  registerReceiver(smsReceiver , intentFilter);
    }
   
    @Override
    protected void onPause() {
     // TODO Auto-generated method stub
     super.onPause();

    //注销广播接收器
     unregisterReceiver(smsReceiver);
    }
    

}

 

//广播接收器

public class SmsReceiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  // 判断是系统短信;
  if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
   // 不再往下传播;
  this.abortBroadcast();
  } 
  Log.i("xxx", "messgae received");
  Bundle bundle = intent.getExtras();
  if (bundle != null) {
   Object[] pdus = (Object[]) bundle.get("pdus");
   SmsMessage[] messages = new SmsMessage[pdus.length];
   for (int i = 0; i < pdus.length; i++) {
    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
   }
   for (SmsMessage message : messages) {
    String telNum = message.getDisplayOriginatingAddress();
    String msg = message.getDisplayMessageBody();
     

     //收到短信传给SMSControl类
     SMSControl.getInstance().onRecvSmsMessage(telNum, msg);
     
   } 
  }
 }

}

 

public class SMSControl {

 
 private static SMSControl instance;
 private SmsReceiveListener listener;
 private SMSControl(){
  
 }
 public static SMSControl getInstance(){
  if(null == instance){
   instance = new SMSControl();
  }
  return instance;
 }
 public void onRecvSmsMessage(String telNum, String msg){
  if (null != listener){
   listener.onReceiveMessage(telNum, msg);
  }
 }
 public void setSmsReceiveListener(SmsReceiveListener l){
  this.listener = l;
 }
 public interface SmsReceiveListener{
  void onReceiveMessage(String telNum, String msg);
 }
 

    //发送一条短消息
    public void sendSMS(String phonenumber,String msg,Context context){
     //发送短信的类
        PendingIntent pi=PendingIntent.getActivity(context, 0, new Intent(), 0);
        SmsManager sms=SmsManager.getDefault();
        sms.sendTextMessage(phonenumber, null, msg, pi, null);//发送信息到指定号码
       
    }
}

还需要在Manifest中加入相关权限:

//发送消息权限

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

//接收消息权限
    <uses-permission android:name="android.permission.RECEIVE_SMS">
    </uses-permission>

 

 

原创粉丝点击