Android手机使用广播监听手机收到的短信
2015-02-05 23:00
609 查看
我们使用的Android手机在收到短信的时候会发出一条系统广播。该条广播中存放着接收到的短信的详细信息。本文将详细介绍如何通过动态注册广播来监听短信。
注册广播有两种方式,一种是动态注册,另一种是静态注册。动态注册,顾名思义就是在程序运行时注册的,需要用到广播的时候就注册,用完即销毁。静态注是在AndroidManifest.xml中注册的,在<application>中使用<receiver>标签注册。
那么如何创建一个监听短信的广播接收器呢,其实只需要新建一个类,让这个类继承BroadcastReceiver,并重写父类的onReceiver方法就可以了。当有广播来了,onReceiver()方法就会执行。
首先创建一个ListenerSMSBroadcast项目。然后在MainActivity中修改添加代码。现在在MainActivity中创建一个SMSBroadcastReceiver类并继承BroadcastReceiver,然后重写onReceiver方法。
以上代码可以看到,SMSBroadcastReceiver类继承了BroadcastReceiver 而且重写了onReceive()方法。在onReceiver()方法中使用intent.getExtras().get("pdus")获取到了一个Object[]类型的数组,而且每一个Object都是byte类型的。然后使用for循环遍历数组,最后使用Handler将短信内容显示在activity中。
下面是动态注册广播。
在这段代码中声明了一个IntentFilter对象,并给它添加了一个值为android.provider.Telephony.SMS_RECEIVED的action。为什么要给它添加这个值呢?因为当手机收到短信的时候系统会发出一条值为android.provider.Telephony.SMS_RECEIVED的广播,这正是要监听的广播。接着就创建了一个SMSBroadcastReceiver实例。然后调用registerReceiver()方法注册广播,这里讲SMSBroadcastReceiver实例和IntentFilter实例都传进去,这样SMSBroadcastReceiver就会收到系统收到短信时发送的广播了。
注意,这里面读取短信,所以需要添加读取短信权限的。只要在AndroidManifest.xml中添加一些权限:
既然是动态注册广播接收器,一定要取消注册。取消注册需要调用unregisterReceiver()来实现。这里面是在onDestroy()方法中取消注册的。
本文用到了Handler来修改页面中TextView的text的属性值得。message.what来判断是否要修改text的值,message.obj中是修改的值。
注册广播有两种方式,一种是动态注册,另一种是静态注册。动态注册,顾名思义就是在程序运行时注册的,需要用到广播的时候就注册,用完即销毁。静态注是在AndroidManifest.xml中注册的,在<application>中使用<receiver>标签注册。
那么如何创建一个监听短信的广播接收器呢,其实只需要新建一个类,让这个类继承BroadcastReceiver,并重写父类的onReceiver方法就可以了。当有广播来了,onReceiver()方法就会执行。
首先创建一个ListenerSMSBroadcast项目。然后在MainActivity中修改添加代码。现在在MainActivity中创建一个SMSBroadcastReceiver类并继承BroadcastReceiver,然后重写onReceiver方法。
class SMSBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context arg0, Intent intent) { 6 Object[] object=(Object[]) intent.getExtras().get("pdus"); StringBuilder sb=new StringBuilder(); for (Object pdus : object) { byte[] pdusMsg=(byte[]) pdus; SmsMessage sms=SmsMessage.createFromPdu(pdusMsg); String mobile=sms.getOriginatingAddress();//发送短信的手机号 String content=sms.getMessageBody();//短信内容 //下面是获取短信的发送时间 Date date=new Date(sms.getTimestampMillis()); String date_time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); //追加到StringBuilder中 sb.append("短信发送号码:"+mobile+"\n短信内容:"+content+"\n发送时间:"+date_time+"\n\n"); } Message msg=new Message(); msg.what=RECEIVERED_MSG; msg.obj=sb.toString(); handler.sendMessage(msg); } }
以上代码可以看到,SMSBroadcastReceiver类继承了BroadcastReceiver 而且重写了onReceive()方法。在onReceiver()方法中使用intent.getExtras().get("pdus")获取到了一个Object[]类型的数组,而且每一个Object都是byte类型的。然后使用for循环遍历数组,最后使用Handler将短信内容显示在activity中。
下面是动态注册广播。
private IntentFilter intentFilter; private SMSBroadcastReceiver smsBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_msg=(TextView) findViewById(R.id.tv_msg); intentFilter=new IntentFilter(); intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); smsBroadcastReceiver=new SMSBroadcastReceiver(); //动态注册广播 registerReceiver(smsBroadcastReceiver, intentFilter); }
在这段代码中声明了一个IntentFilter对象,并给它添加了一个值为android.provider.Telephony.SMS_RECEIVED的action。为什么要给它添加这个值呢?因为当手机收到短信的时候系统会发出一条值为android.provider.Telephony.SMS_RECEIVED的广播,这正是要监听的广播。接着就创建了一个SMSBroadcastReceiver实例。然后调用registerReceiver()方法注册广播,这里讲SMSBroadcastReceiver实例和IntentFilter实例都传进去,这样SMSBroadcastReceiver就会收到系统收到短信时发送的广播了。
注意,这里面读取短信,所以需要添加读取短信权限的。只要在AndroidManifest.xml中添加一些权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
既然是动态注册广播接收器,一定要取消注册。取消注册需要调用unregisterReceiver()来实现。这里面是在onDestroy()方法中取消注册的。
protected void onDestroy() { super.onDestroy(); //取消注册广播 unregisterReceiver(smsBroadcastReceiver); }
本文用到了Handler来修改页面中TextView的text的属性值得。message.what来判断是否要修改text的值,message.obj中是修改的值。
private Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { if(msg.what==RECEIVERED_MSG) { tv_msg.setText("收到的信息:\n"+msg.obj);//\n表示换行 } }; };
相关文章推荐
- android 使用广播接收者监听短信和拦截外拨电话
- android 使用广播接收者监听短信和拦截外拨电话
- Android初级教程使用服务注册广播接收者监听手机解锁屏变化
- android 使用广播接收者监听短信和拦截外拨电话
- [Android] 使用广播接收器Braodcast Receiver 监听手机来电 去电 挂断的事
- Android使用广播监听网络状态变化 一直收到系统广播
- Android初级教程使用服务注册广播接收者监听手机解锁屏变化
- android 使用广播接收者监听短信和拦截外拨电话
- android广播和短信广播详解----使用广播接收者监听短信
- 使用广播接收者怎么只能监听收到的短信 ?为啥短信发送号码和时间为null
- Android使用广播监听网络状态变化 一直收到系统广播 广播过滤
- Android 使用ContentObserver监听短信的变化,并发送信息给特定的手机号码
- 使用广播接收者监听短信
- Android手机上监听短信的两种方式
- Android上监听收到的短信(SMS)
- android关于监听短信的广播获取内容
- [原] Android中监听手机链接数据线USB大容量存储的广播
- android 使用广播监听网络状态
- network: android 使用广播监听网络状态
- android-BroadcastReceiver 通过终止广播 阻止用户收到短信