1. 程式人生 > >Android入門:廣播接收者應用(電話攔截器)

Android入門:廣播接收者應用(電話攔截器)

一、電話攔截器應用說明

在我們輸入完電話號碼並撥打電話時,系統會發出一個有序廣播(action="android.intent.action.NEW_OUTGOING_CALL"),並且預計會發送給電話撥號器應用的廣播接收者,但是我們可以設定一個優先順序更高的攔截器廣播接收者(android:priority="1000"),使得在撥號器的廣播接收者收到電話之前將電話清空,如圖所示:


由於此應用應該比較隱蔽,因此需要開機自啟動,當開機自啟動時,系統會發出一個廣播,啟用滿足條件的元件(action="android.intent.action.BOOT_COMPLETED");

二、程式碼實現

AndroidManifest.xml

  1. <uses-permissionandroid:name="android.permission.PROCESS_OUTGOING_CALLS"/><!-- 外界撥打許可權 -->
  2. <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/><!-- 接收開機廣播 -->
  3. <application
  4.      android:icon="@drawable/ic_launcher"
  5.      android:label
    ="@string/app_name">
  6.      <receiverandroid:name=".PhoneBroadcastReceiver">
  7.          <intent-filterandroid:priority="1000">
  8.              <actionandroid:name="android.intent.action.NEW_OUTGOING_CALL"/>
  9.              <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
  10.          </
    intent-filter>
  11.      </receiver>
  12. </application>


PhoneBroadcastReceiver.java

  1. package com.xiazdong.phonelistener;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. publicclass PhoneBroadcastReceiver extends BroadcastReceiver {  
  6.     @Override
  7.     publicvoid onReceive(Context context, Intent intent) {  
  8.         if("5556".equals(this.getResultData())) this.setResultData(null);   //如果電話是5556,則清空,不讓他撥打
  9.     }  
  10. }