呼出電話
-----------------------------------
【工做機制】
當呼出電話時,系統會發出一個有序廣播,而且,將呼叫的電話號碼經過setResultData()進行封裝,最後,呼叫程序接收到該廣播後,實現呼出。
【實現原理】
經過getResultData()獲取電話號碼,根據自定義的邏輯對號碼進行判斷,在有必要的時候,經過setResultData()修改電話號碼。
權限:android.permission.PROCESS_OUTGOING_CALLS
廣播Action:android.intent.action.NEW_OUTGOING_CALLjava
監聽短信
-----------------------------------
【工做原理】當新的短信到來時,系統會發出廣播,而且將短信的相關數據封裝在Intent中。
【實現過程】
權限:android.permission.RECEIVE_SMS
廣播Action:android.provider.Telephony.SMS_RECEIVEDandroid
eg:ide
public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 日誌 Log.d("tag", "SmsReceiver.onReceive()"); // 短信的數據對象 SmsMessage msg; // 從Intent中獲取短信的內容,每次收到的短信可能由多條短信組成 Object[] pdus = (Object[]) intent.getExtras().get("pdus"); // 短信的數據 byte[] pdu; // 循環獲取的短信內容,即循環時每次讀1條短信的數據 for (int i = 0; i < pdus.length; i++) { // 獲取短信的數據 pdu = (byte[]) pdus[i]; // 將數據封裝爲SmsMessage對象 msg = SmsMessage.createFromPdu(pdu); // 獲取短信的內容 String address = msg.getOriginatingAddress(); String body = msg.getMessageBody(); Date date = new Date(msg.getTimestampMillis()); // 日誌輸入顯示 Log.d("tag", "address -> " + address); Log.d("tag", "date -> " + date); Log.d("tag", "body -> " + body); } } }
監聽來電spa
-----------------------------------
【工做原理】當新的呼叫到來時,系統會發出廣播。
【實現過程】
權限:日誌
android.permission.READ_PHONE_STATE
android.permission.CALL_PHONE
廣播Action:android.intent.action.PHONE_STATE
【掛斷電話】
問題1:ITelephony能夠實現掛斷電話,可是該類型不可識別,則須要自定義ITelephony的aidl文件
問題2:獲取ITelephony對象能夠經過TelephonyManager的getITelephony()方法獲取,可是,該方法是使用private修飾的私有方法
code