android 監聽電話狀態 來電 接聽 掛斷

如果想要監聽手機的來電狀態  需要接收手機的電話廣播 

首先是靜態註冊

 <receiver android:name=".PhoneReceiver"
            android:exported="true"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>

然後是 添加權限

android.permission.PROCESS_OUTGOING_CALLS
public class PhoneReceiver extends BroadcastReceiver {
    String TAG = getClass().getName();
    private Context mContext;

    @Override
    public void onReceive(Context context, Intent intent) {
        mContext = context;
        //來電 去電判斷
        if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            String phoneNumber = intent
                    .getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        } else {
            TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
            //設置監聽
            tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }

    PhoneStateListener listener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            switch (state) { 
                case TelephonyManager.CALL_STATE_IDLE:
                    System.out.println("======掛斷");
                    Intent broadcastIntent = new Intent("android.intent.action.MY_BROADCAST");
                    mContext.sendBroadcast(broadcastIntent);

                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    break;
            }
        }
    };
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章