Android廣播接實(shí)現(xiàn)監(jiān)聽電話狀態(tài)(電話的狀態(tài),攔截)
首先我們來理解下監(jiān)聽器的機(jī)制。
Android的事件處理機(jī)制有兩種:監(jiān)聽和回調(diào)。
A基于監(jiān)聽的事件處理
主要涉及三類對(duì)象:EventSource(事件源),Event(事件),EventListener(事件監(jiān)聽器)
監(jiān)聽機(jī)制處理事件的流程圖如下(委派式:Delegation):
1:需要在AndroidManifest.xml清單中添加權(quán)限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
2:注冊(cè)廣播 要注意事件的級(jí)別 (android中的級(jí)別-1000~1000)
<receiver android:name=".PhoneBroadcastReceiver"> <intent-filter android:priority="1000"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver>
詳細(xì)配置請(qǐng)看 AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zyw.broadcastsendsms" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".SendSMS" android:label="@string/title_activity_send_sms" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".PhoneBroadcastReceiver"> <intent-filter android:priority="1000"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> </manifest>
3:編寫廣播的實(shí)現(xiàn)類 這里需要繼承BroadcastReceiver 實(shí)現(xiàn)onReceive()方法
程序的源代碼如下:
package com.zyw.broadcastsendsms; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager; import android.util.Log; public class PhoneBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "message"; private static boolean mIncomingFlag = false; private static String mIncomingNumber = null; @Override public void onReceive(Context context, Intent intent) { // 如果是撥打電話 if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { mIncomingFlag = false; String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.i(TAG, "call OUT:" + phoneNumber); } else { // 如果是來電 TelephonyManager tManager = (TelephonyManager) context .getSystemService(Service.TELEPHONY_SERVICE); switch (tManager.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: mIncomingNumber = intent.getStringExtra("incoming_number"); Log.i(TAG, "RINGING :" + mIncomingNumber); break; case TelephonyManager.CALL_STATE_OFFHOOK: if (mIncomingFlag) { Log.i(TAG, "incoming ACCEPT :" + mIncomingNumber); } break; case TelephonyManager.CALL_STATE_IDLE: if (mIncomingFlag) { Log.i(TAG, "incoming IDLE"); } break; } } } /*@Override public void onReceive(Context context, Intent intent) { String number = getResultData(); if("5556".equals(number)){ setResultData(null);//掛斷 }else{ number = "12593"+ number; //其他,則加區(qū)號(hào) setResultData(number); } }*/ }
以上內(nèi)容給大家介紹了Android廣播接實(shí)現(xiàn)監(jiān)聽電話狀態(tài)(電話的狀態(tài),攔截)的相關(guān)知識(shí),希望對(duì)大家有所幫助!
- Android中BroadcastReceiver(異步接收廣播Intent)的使用
- Android 廣播大全 Intent Action 事件詳解
- Android 監(jiān)聽apk安裝替換卸載廣播的實(shí)現(xiàn)代碼
- Android中的廣播和廣播接收器代碼實(shí)例
- android連接wifi時(shí)獲取廣播地址代碼
- Android基于廣播事件機(jī)制實(shí)現(xiàn)簡(jiǎn)單定時(shí)提醒功能代碼
- Android廣播接收機(jī)制詳細(xì)介紹(附短信接收實(shí)現(xiàn))
- Android 開機(jī)廣播的使用及配置
- android如何默認(rèn)打開小區(qū)廣播具體實(shí)現(xiàn)
- Android學(xué)習(xí)之本地廣播使用方法詳解
相關(guān)文章
Kotlin實(shí)現(xiàn)圖片選擇器的關(guān)鍵技術(shù)點(diǎn)總結(jié)
這篇文章主要給大家介紹了關(guān)于Kotlin實(shí)現(xiàn)圖片選擇器的一些關(guān)鍵技術(shù)點(diǎn),這是一個(gè)我在學(xué)習(xí)Kotlin過程中的一個(gè)練手項(xiàng)目,非常適合學(xué)習(xí)Kotlin的時(shí)候參考,需要的朋友可以參考下2021-09-09android sdk安裝及開發(fā)環(huán)境部署
本文給大家詳細(xì)講解了android sdk安裝方法以及android開發(fā)環(huán)境部署方法,非常的細(xì)致全面,有需要的小伙伴務(wù)必詳細(xì)研究下。2015-11-11android中用xml文件實(shí)現(xiàn)帶邊框背景效果的方法
這篇文章主要給大家介紹了在android中xml文件實(shí)現(xiàn)帶邊框背景效果的方法,其實(shí)實(shí)現(xiàn)的功能不是很難,僅作記錄,幫助需要的朋友們做個(gè)參考,需要的朋友們下面來一起看看吧。2017-06-06kotlin中EditText賦值Type mismatch方式
這篇文章主要介紹了kotlin中EditText賦值Type mismatch方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android利用LitePal操作數(shù)據(jù)庫存取圖片
這篇文章主要為大家詳細(xì)介紹了Android利用LitePal操作數(shù)據(jù)庫存取圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android關(guān)鍵字persistent詳細(xì)分析
這篇文章主要介紹了Android關(guān)鍵字persistent的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04