静态注册方式的特色:只要安装了静态注册的BroadCastReceiver应用,无论退不退出应用
广播接收者都在监听
//简单实现监听电话状态例子
静态注册方式的特色:只要安装了静态注册的BroadCastReceiver应用,无论退不退出应用
广播接收者都在监听
效果图示例:
java
结果:android
一、静态注册在配置清单里实现数组
代码app
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastreceiver"
android:versionCode="1"
android:versionName="1.0" >ide
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<!--监听电话状态须要添加的权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>spa
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />日志
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 电话状态监听静态注册 receiver的 name:是.包名 + 类名(这里在同一个包下直接.类名)
该类继承BroadCastReceiver(广播接收者)类 也就是要注册的BroadCastReceiver(广播接收者)-->
<receiver android:name=".MyPhoneStateReceiver">
<!--intent-filter(意图过滤器)-->
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
</application>xml
</manifest>继承
===================utf-8
二、MyPhoneStateReceiver类
代码
public class MyPhoneStateReceiver extends BroadcastReceiver {
/**
* onReceive方法是继承BroadcastReceiver类必须重写的
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("data", "电话状态改变了");
Bundle bundle = intent.getExtras();
//获取来电的号码
String number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
//获取管理器
TelephonyManager manager = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
//经过管理器获取电话状态
int state = manager.getCallState();
switch(state){
case TelephonyManager.CALL_STATE_IDLE://挂断
Log.i("data", "电话挂断了");
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接听
Log.i("data", "电话接听");
break;
case TelephonyManager.CALL_STATE_RINGING://铃响
Log.i("data", number + "来电");
break;
}
}
}
===================================================
BroadCastReceiver(广播接收者的静态注册)简单使用例子2
静态注册方式的特色:只要安装了静态注册的BroadCastReceiver应用,无论退不退出应用
广播接收者都在监听
//简单实现监听短信消息例子
一、静态注册在配置清单里实现
代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastreceiver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<!--监听电话状态须要添加的权限-->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 短信监听静态注册 receiver的 name:是.包名 + 类名(这里在同一个包下直接.类名)
该类继承BroadCastReceiver(广播接收者)类 也就是要注册的BroadCastReceiver(广播接收者)-->
<receiver android:name=".MySmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
</manifest>
=====================
二、MySmsReceiver.java类
代码
public class MySmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras(); // Protocol Data Unit 协议数据单元 Object[] pdus = (Object[]) bundle.get("pdus");//获取发送过来的短信(里面装有发送过来全部短信数据) //进一步封装发送过来的短信数据的数组 SmsMessage[] smsMessage = new SmsMessage[pdus.length]; for(int i = 0;i<smsMessage.length;i++){ //进一步把短信数据封装到数组SmsMessage //为了方便操做发送过来的短信数据(用该数组里的方法来操做) smsMessage[i] = SmsMessage.createFromPdu((byte[])pdus[i]); } //获取发送短信的电话号码 //从0位置获取就行 要是短信内容够长其余位置获取也行 //可是为了保证数组不越界问题 从0位置获取比较稳妥 String smsNumber = smsMessage[0].getDisplayOriginatingAddress(); //获取发送过来的短信内容(把短信内容拼接起来) StringBuffer sb = new StringBuffer(); for(int i = 0;i<smsMessage.length;i++){ sb.append(smsMessage[i].getDisplayMessageBody()); } String content = sb.toString();//短信内容 Log.i("data", smsNumber + "::" + content);//在日志猫里输出 //把短信信息发送给其余接收者 if("110".equals(smsNumber)){ abortBroadcast();//中断广播 //从新把拦截的广播发送给其余接收者 SmsManager smsManager = SmsManager.getDefault();//获取管理器 //使用管理器里的sendTextMessage方法把拦截的广播发送给其余接收者 /** * sendTextMessage(String destinationAddress, * String scAddress, String text, PendingIntent sentIntent, * PendingIntent deliveryIntent) * //第一个参数:要发送给其余接收者的地址 * //第三个参数:要发送的内容 */ smsManager.sendTextMessage("5556", null, smsNumber + "::" + content, null, null); } } }