Android監(jiān)聽(tīng)通話正確操作方法介紹
對(duì)智能手機(jī)有所了解的朋友都知道其中一個(gè)應(yīng)用廣泛的手機(jī)操作系統(tǒng)Android 開(kāi)源手機(jī)操作系統(tǒng)。那么在這一系統(tǒng)中想要實(shí)現(xiàn)通話的監(jiān)聽(tīng)功能的話,我們應(yīng)當(dāng)如何操作呢?在這里就為大家詳細(xì)介紹了Android監(jiān)聽(tīng)通話的相關(guān)實(shí)現(xiàn)方法。#t#
開(kāi)發(fā)應(yīng)用程序的時(shí)候,我們希望能夠監(jiān)聽(tīng)電話的呼入,以便執(zhí)行暫停音樂(lè)播放器等操作,當(dāng)電話結(jié)束之后,再次恢復(fù)播放。在Android平臺(tái)可以通過(guò)TelephonyManager和PhoneStateListener來(lái)完成此任務(wù)。
TelephonyManager作為一個(gè)Service接口提供給用戶查詢電話相關(guān)的內(nèi)容,比如IMEI,LineNumber1等。通過(guò)下面的代碼即可獲得TelephonyManager的實(shí)例。
- TelephonyManager mTelephonyMgr = (TelephonyManager) this
- .getSystemService(Context.TELEPHONY_SERVICE);
在Android平臺(tái)中,PhoneStateListener是個(gè)很有用的監(jiān)聽(tīng)器,用來(lái)監(jiān)聽(tīng)電話的狀態(tài),比如呼叫狀態(tài)和連接服務(wù)等。Android監(jiān)聽(tīng)通話方法如下所示:
- public void onCallForwardingIndicatorChanged(boolean cfi)
- public void onCallStateChanged(int state,
String incomingNumber)- public void onCellLocationChanged(CellLocation location)
- public void onDataActivity(int direction)
- public void onDataConnectionStateChanged(int state)
- public void onMessageWaitingIndicatorChanged(boolean mwi)
- public void onServiceStateChanged
(ServiceState serviceState)- public void onSignalStrengthChanged(int asu)
這里我們只需要覆蓋onCallStateChanged()方法即可監(jiān)聽(tīng)呼叫狀態(tài)。在TelephonyManager中定義了三種狀態(tài),分別是振鈴(RINGING),摘機(jī)(OFFHOOK)和空閑(IDLE),我們通過(guò)state的值就知道現(xiàn)在的電話狀態(tài)了。
獲得了TelephonyManager接口之后,調(diào)用listen()方法即可實(shí)現(xiàn)Android監(jiān)聽(tīng)通話。
- mTelephonyMgr.listen(new TeleListener(),
- PhoneStateListener.LISTEN_CALL_STATE);
下面是個(gè)簡(jiǎn)單的測(cè)試?yán)樱皇前押艚袪顟B(tài)追加到TextView之上。
- package com.j2medev;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.telephony.PhoneStateListener;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.widget.TextView;
- public class Telephony extends Activity {
- private static final String TAG = "Telephony";
- TextView view = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TelephonyManager mTelephonyMgr = (TelephonyManager) this
- .getSystemService(Context.TELEPHONY_SERVICE);
- mTelephonyMgr.listen(new TeleListener(),
- PhoneStateListener.LISTEN_CALL_STATE);
- view = new TextView(this);
- view.setText("listen the state of phone\n");
- setContentView(view);
- }
- class TeleListener extends PhoneStateListener {
- @Override
- public void onCallStateChanged(int state,
String incomingNumber) {- super.onCallStateChanged(state, incomingNumber);
- switch (state) {
- case TelephonyManager.CALL_STATE_IDLE: {
- Log.e(TAG, "CALL_STATE_IDLE");
- view.append("CALL_STATE_IDLE " + "\n");
- break;
- }
- case TelephonyManager.CALL_STATE_OFFHOOK: {
- Log.e(TAG, "CALL_STATE_OFFHOOK");
- view.append("CALL_STATE_OFFHOOK" + "\n");
- break;
- }
- case TelephonyManager.CALL_STATE_RINGING: {
- Log.e(TAG, "CALL_STATE_RINGING");
- view.append("CALL_STATE_RINGING" + "\n");
- break;
- }
- default:
- break;
- }
- }
- }
- }
不要忘記在AndroidManifest.xml里面添加個(gè)permission.
- < uses-permission android:name=
"android.permission.READ_PHONE_STATE" />
Android監(jiān)聽(tīng)通話的具體操作方法就為大家介紹到這里。