BroadCastReceiver(广播接收者的静态注册)简单使用例子

静态注册方式的特色:只要安装了静态注册的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);  }  }  }  

相关文章
相关标签/搜索