監(jiān)聽撥打電話(靜態(tài)注冊) 踩過的坑

【1】 監(jiān)聽 撥打電話 的狀態(tài): 掛斷(空閑) --》 接聽 --》 掛斷
【注意】

public class PhoneReceiver extends BroadcastReceiver {

private int mOldState;
private int mCurrentState;
private boolean isSend = true;

@Override
public void onReceive(Context context, Intent intent) {

    // 如果是去電
    if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {

            Log.e("lee","去電======================================");
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Service.TELEPHONY_SERVICE);
            tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    }
}


// 設(shè)置一個(gè)監(jiān)聽器
PhoneStateListener listener = new PhoneStateListener() {

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        // 注意,方法必須寫在super方法后面,否則incomingNumber無法獲取到值。
        super.onCallStateChanged(state, incomingNumber);
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                mOldState = TelephonyManager.CALL_STATE_IDLE;
                Log.v("lee", "掛斷");
                // ToastUtil.showToast("掛斷");

                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // ToastUtil.showToast("接聽");
                Log.v("lee", "接聽");

                mCurrentState = TelephonyManager.CALL_STATE_OFFHOOK;

                break;
            case TelephonyManager.CALL_STATE_RINGING:
                // ToastUtil.showToast("響鈴:來電號碼" + incomingNumber); // 輸出來電號碼
                Log.v("lee", "響鈴:來電號碼" + incomingNumber);
                break;
                default:
                    break;
        }

 // 注意 不要在onCallStateChanged()方法 做邏輯判斷, 因?yàn)榭赡軙e調(diào)用多次。
        if(mOldState == TelephonyManager.CALL_STATE_IDLE &&
                mCurrentState == TelephonyManager.CALL_STATE_OFFHOOK){
            mOldState  =  -1;
            mCurrentState = -1;
            if( isSend){
                isSend  = false;
                // todo  具體邏輯
            }else if( isSend){
                isSend  = false;
               // todo   具體邏輯

            }else if( isSend){
                isSend  = false;
               // todo   具體邏輯

            }
        }
    }
};

}

【2】注冊 廣播接收者

   <receiver android:name="com.vest.receiver.PhoneReceiver">
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        </intent-filter>
    </receiver>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 【Android 廣播】 BroadcastReceiver簡介 BroadcastReceiver(廣播接收器)...
    Rtia閱讀 3,550評論 1 17
  • Android中的廣播 廣播接受器,可以比喻成收音機(jī)。而廣播則可以看成電臺。 Android系統(tǒng)內(nèi)部相當(dāng)于已經(jīng)有一...
    sunhaiyu閱讀 3,351評論 1 0
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情況下的生命周期:在用戶參與的情況下...
    AndroidMaster閱讀 3,272評論 0 8
  • 在吳教授和各位老師及后勤老師的帶領(lǐng)下,在《曹全碑》學(xué)習(xí)班已經(jīng)學(xué)習(xí)十四天了,從開始的緊張心情(就像各位老師說的戰(zhàn)戰(zhàn)兢...

友情鏈接更多精彩內(nèi)容