一、電話攔截器應用說明
在我們輸入完電話號碼並撥打電話時,系統會發出一個有序廣播(action="Android.intent.action.NEW_OUTGOING_CALL"),並且預計會發送給電話撥號器應用的廣播接收者,但是我們可以設置一個優先級更高的攔截器廣播接收者(android:priority="1000"),使得在撥號器的廣播接收者收到電話之前將電話清空,如圖所示:
由於此應用應該比較隱蔽,因此需要開機自啟動,當開機自啟動時,系統會發出一個廣播,激活滿足條件的組件(action="android.intent.action.BOOT_COMPLETED");
二、代碼實現
AndroidManifest.xml
- <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <!-- 外界撥打權限 -->
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!-- 接收開機廣播 -->
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <receiver android:name=".PhoneBroadcastReceiver">
- <intent-filter android:priority="1000">
- <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
- <action android:name="android.intent.action.BOOT_COMPLETED"/>
- </intent-filter>
- </receiver>
- </application>
PhoneBroadcastReceiver.java
- package com.xiazdong.phonelistener;
-
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
-
- public class PhoneBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- if("5556".equals(this.getResultData())) this.setResultData(null); //如果電話是5556,則清空,不讓他撥打
- }
- }