監視系統 電話和短信

呼出電話
-----------------------------------
【工做機制】
當呼出電話時,系統會發出一個有序廣播,而且,將呼叫的電話號碼經過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

相關文章
相關標籤/搜索