Android入门:广播接收者应用(电话拦截器)


一、电话拦截器应用说明

在我们输入完电话号码并拨打电话时,系统会发出一个有序广播(action="Android.intent.action.NEW_OUTGOING_CALL"),并且预计会发送给电话拨号器应用的广播接收者,但是我们可以设置一个优先级更高的拦截器广播接收者(android:priority="1000"),使得在拨号器的广播接收者收到电话之前将电话清空,如图所示:

由于此应用应该比较隐蔽,因此需要开机自启动,当开机自启动时,系统会发出一个广播,激活满足条件的组件(action="android.intent.action.BOOT_COMPLETED");

二、代码实现

AndroidManifest.xml

  1. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>   <!-- 外界拨打权限 -->  
  2. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>   <!-- 接收开机广播 -->  
  3. <application  
  4.      android:icon="@drawable/ic_launcher"  
  5.      android:label="@string/app_name" >  
  6.      <receiver android:name=".PhoneBroadcastReceiver">  
  7.          <intent-filter android:priority="1000">  
  8.              <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>  
  9.              <action android:name="android.intent.action.BOOT_COMPLETED"/>  
  10.          </intent-filter>  
  11.      </receiver>  
  12. </application>  

PhoneBroadcastReceiver.java

  1. package com.xiazdong.phonelistener;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6.   
  7. public class PhoneBroadcastReceiver extends BroadcastReceiver {  
  8.     @Override  
  9.     public void onReceive(Context context, Intent intent) {  
  10.         if("5556".equals(this.getResultData())) this.setResultData(null);   //如果电话是5556,则清空,不让他拨打   
  11.     }  
  12. }  

相关内容