Android廣播接實現(xiàn)監(jiān)聽電話狀態(tài)(電話的狀態(tài),攔截)
首先我們來理解下監(jiān)聽器的機制。
Android的事件處理機制有兩種:監(jiān)聽和回調。
A基于監(jiān)聽的事件處理
主要涉及三類對象:EventSource(事件源),Event(事件),EventListener(事件監(jiān)聽器)
監(jiān)聽機制處理事件的流程圖如下(委派式:Delegation):
1:需要在AndroidManifest.xml清單中添加權限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
2:注冊廣播 要注意事件的級別 (android中的級別-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>
詳細配置請看 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:編寫廣播的實現(xiàn)類 這里需要繼承BroadcastReceiver 實現(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ū)號 setResultData(number); } }*/ }
以上內容給大家介紹了Android廣播接實現(xiàn)監(jiān)聽電話狀態(tài)(電話的狀態(tài),攔截)的相關知識,希望對大家有所幫助!
相關文章
android sdk安裝及開發(fā)環(huán)境部署
本文給大家詳細講解了android sdk安裝方法以及android開發(fā)環(huán)境部署方法,非常的細致全面,有需要的小伙伴務必詳細研究下。2015-11-11android中用xml文件實現(xiàn)帶邊框背景效果的方法
這篇文章主要給大家介紹了在android中xml文件實現(xiàn)帶邊框背景效果的方法,其實實現(xiàn)的功能不是很難,僅作記錄,幫助需要的朋友們做個參考,需要的朋友們下面來一起看看吧。2017-06-06kotlin中EditText賦值Type mismatch方式
這篇文章主要介紹了kotlin中EditText賦值Type mismatch方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03