开发应用程序的时候,我们希望能够监听电话的呼入,以便执行暂停音乐播放器等操作,当电话结束之后,再次恢复播放。在Android平台可以通过TelephonyManager和PhoneStateListener来完成此任务。
TelephonyManager作为一个Service接口提供给用户查询电话相关的内容,比如IMEI,LineNumber1等。通过下面的代码即可获得TelephonyManager的实例。
TelephonyManager mTelephonyMgr = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
在Android平台中,PhoneStateListener是个很有用的监听器,用来监听电话的状态,比如呼叫状态和连接服务等。其方法如下所示:
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()方法即可监听呼叫状态。在TelephonyManager中定义了三种状态,分别是振铃(RINGING),摘机(OFFHOOK)和空闲(IDLE),我们通过state的值就知道现在的电话状态了。
获得了TelephonyManager接口之后,调用listen()方法即可监听电话状态。
mTelephonyMgr.listen(new TeleListener(),
PhoneStateListener.LISTEN_CALL_STATE);
下面是个简单的测试例子,只是把呼叫状态追加到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里面添加个permission.
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
分享到:
相关推荐
【基于Android平台下的通话录音软件】 在Android平台上开发通话录音软件是一项常见的移动应用开发任务,这类软件能够帮助用户记录他们的电话对话和语音留言,确保重要信息的留存和回顾。为了实现这一功能,开发者...
- 视频通话界面设计要考虑用户体验,包括视频预览布局、控制按钮的布局和交互逻辑,以及在网络不稳定时的错误提示和恢复机制。 8. **安全与隐私**: - 必须确保通信过程的安全,避免数据被窃取或篡改。可以采用...
1. **电话状态监听**:Android提供了PhoneStateListener类,允许应用程序监听手机的状态变化,如来电、去电、通话中等。通过注册一个PhoneStateListener,并重写onCallStateChanged()方法,我们可以获取到具体的电话...
5. **事件处理**:源码中会有各种事件处理逻辑,如网络连接状态变化、呼叫状态改变、来电提示等,这些都需要通过监听器和回调函数来实现。 6. **权限管理**:为了实现VoIP功能,Sipdroid需要在AndroidManifest.xml...
9. **权限管理**:Android的权限管理系统需要确保应用在请求敏感权限(如读取通话记录)时,会提示用户并得到用户的明确同意。 10. **性能优化**:考虑到电池效率和用户体验,开发者需要合理处理事件监听,避免不必...
6. **通知和提醒**:可能有功能提示用户通话时间已达到预设限制,这部分可能使用了NotificationManager服务。 7. **数据处理逻辑**:对通话记录进行计算,包括通话时长的累计,可能涉及时间戳的处理和转换。 8. **...
在Android平台上,实现黑名单拦截和通话双向录音涉及多个技术领域,包括权限管理、电话状态监听、音频录制等。下面将详细讲解这些知识点。 1. **权限管理**: 在Android中,涉及到用户隐私的操作,如读取联系人、...
在Android开发中,有时我们需要对系统的音量进行自定义控制,比如使用Seekbar来模拟音量调节滑块,同时能够根据不同的场景(如媒体播放、通话中)智能切换控制对应的音量。本教程将深入讲解如何实现这个功能,主要...
在Android设备上,音量控制主要分为五个不同的类别:系统音量、通话音量、铃声音量、媒体音量以及提示声音。下面将详细解释这些音量类型以及如何进行调控。 1. **系统音量**:系统音量主要控制通知、键盘点击声、...
- **事件监听**:监听通话状态变化,如呼叫建立、断开、呼叫等待等,以便做出相应的用户界面反馈。 - **资源管理**:合理管理音频和视频设备,确保在多任务环境下正常工作。 4. **优化与扩展**: - **网络优化**...
这个"Android 来电拦截及拦截后的提示音源码.zip"压缩包包含了一个完整的Android应用项目,用于实现来电拦截并播放自定义提示音的功能。以下是这个项目涉及的一些关键知识点: 1. **BroadcastReceiver**: 在Android...
在"计费狗"中,通话记费功能可能涉及监听电话状态广播接收器(PhoneStateListener),该接收器可以捕捉到电话拨打、接听、挂断等事件,进而计算通话时长。短信记费则可能通过监听SMS BroadcastReceiver,一旦有新...
最后,优化用户体验也是不容忽视的一环,包括简洁的UI设计、清晰的通话提示以及流畅的通话体验。为了提高电池效率,还需合理控制后台服务的资源占用,减少不必要的电量消耗。 综上所述,构建Android VoIP免费电话...
4. **事件通知与状态更新**:imsdroid能够监听并处理SIP事件,如呼叫等待、呼叫转移、忙线等,及时更新UI状态,让用户了解通话情况。 5. **网络适配**:imsdroid支持多种网络环境,包括Wi-Fi和移动数据,可以自动...
源码资源"Android 来电拦截及拦截后的提示音源码.zip"可能包含以下关键组件和技术: 1. **BroadcastReceiver**: - 在Android系统中,BroadcastReceiver是用于监听并响应系统广播事件的类。来电时,系统会发出一个...
随着技术的发展,Android支持VoLTE(Voice over LTE)和VoWiFi(Voice over Wi-Fi),提供了更高质量的语音通话体验。开发者可以通过`TelephonyManager`的相关API检测并控制这些功能。 7. **RIL (Radio Interface ...
6. **来电显示与通话状态监听**:如果需要处理来电或者监听通话状态,可以使用`TelephonyManager`类,注册监听器如`PhoneStateListener`,监听`CALL_STATE_RINGING`、`CALL_STATE_OFFHOOK`和`CALL_STATE_IDLE`等状态...
短信拦截主要是通过注册`BroadcastReceiver`监听`android.provider.Telephony.SMS_RECEIVED`广播,当有新的短信到达时,BroadcastReceiver的`onReceive()`方法会被调用。在这里,你可以检查短信的内容和发件人,根据...