Android实现来电和去电的监听
2017-08-30 09:48
483 查看
写个实例实现Android中来电和去电的监听,来电可以使用PhoneStateListener对电话状态的改变进行监听,去电需要动态或者静态去注册广播接收器,对去电进行监听;
来电:
来电所对应的三种静态成员常量:
1、CALL_STATE_IDLE:空闲状态,没有任何活动。
2、CALL_STATE_OFFHOOK:摘机状态,至少有个电话活动。该活动或是拨打(dialing)或是通话,或是 on hold。
3、CALL_STATE_RINGING:来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。
去电:
通过自定义广播接收器,监听手机发出的android.intent.action.NEW_OUTGOING_CALL的广播,然后在广播接收器中处理去电的相关逻辑。
实例代码实现:
权限添加:
另外: 这里给大家提供一个AndroidManifest.xml中权限控制的在线查询工具:
Android Manifest功能与权限描述大全
测试结果如下:
来电:
来电所对应的三种静态成员常量:
1、CALL_STATE_IDLE:空闲状态,没有任何活动。
2、CALL_STATE_OFFHOOK:摘机状态,至少有个电话活动。该活动或是拨打(dialing)或是通话,或是 on hold。
3、CALL_STATE_RINGING:来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。
去电:
通过自定义广播接收器,监听手机发出的android.intent.action.NEW_OUTGOING_CALL的广播,然后在广播接收器中处理去电的相关逻辑。
实例代码实现:
public class PhoneListenService extends Service { private static final String tag = "PhoneListenService"; // 电话管理者对象 private TelephonyManager mTelephonyManager; // 电话状态监听者 private MyPhoneStateListener myPhoneStateListener; // 动态监听去电的广播接收器 private InnerOutCallReceiver mInnerOutCallReceiver; @Override public void onCreate() { mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); myPhoneStateListener = new MyPhoneStateListener(); mTelephonyManager.listen(myPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); // 动态注册广播接收器监听去电信息 mInnerOutCallReceiver = new InnerOutCallReceiver(); // 手机拨打电话时会发送:android.intent.action.NEW_OUTGOING_CALL的广播 IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL); registerReceiver(mInnerOutCallReceiver, intentFilter); super.onCreate(); } /** * 动态注册广播接收器监听去电信息 */ class InnerOutCallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 获取播出的去电号码 String outPhone = getResultData(); Log.i(tag, "outPhone:" + outPhone); } } /** * 自定义内部类对来电的电话状态进行监听 */ class MyPhoneStateListener extends PhoneStateListener { // 重写电话状态改变时触发的方法 @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.i(tag, "响铃:" + incomingNumber); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i(tag, "接听"); break; case TelephonyManager.CALL_STATE_IDLE: Log.i(tag, "挂断"); break; } } } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { // 取消来电的电话状态监听服务 if (mTelephonyManager != null && myPhoneStateListener != null) { mTelephonyManager.listen(myPhoneStateListener, PhoneStateListener.LISTEN_NONE); } // 取消去电的广播监听 if (mInnerOutCallReceiver != null) { unregisterReceiver(mInnerOutCallReceiver); } super.onDestroy(); } }
权限添加:
<!--读取电话的状态信息的权限--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--处理拨出电话,允许程序监视,修改或放弃播出电话--> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
另外: 这里给大家提供一个AndroidManifest.xml中权限控制的在线查询工具:
Android Manifest功能与权限描述大全
测试结果如下:
相关文章推荐
- Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)
- Android来电监听和去电监听实现代码
- android来电监听功能的实现
- Android实现监听来电,并显示提示框
- android 拨打电话、 监听来电、监听呼出电话的功能实现
- 如何实现android中监听来电并生成悬浮窗体提示
- android实现来电静音示例(监听来电)
- 如何实现android中监听来电并生成悬浮窗体提示 以及 打电话
- 如何实现android中监听来电并生成悬浮窗体提示
- android 电话状态监听(来电和去电)实现代码
- Android监听器实现(二)Broadcast方式对通话状态(来电,拨号,挂机)的精确监听
- 主题:如何实现android中监听来电并生成悬浮窗体提示
- 如何实现android中监听来电并生成悬浮窗体提示
- android 电话状态监听(来电和去电)实现代码
- Android监听来电和去电的实现方法
- android如何使用BroadcastReceiver后台实现来电通话记录的监听并存取到sqllite数据库通过Contentprovilder实现接口
- 如何实现android中监听来电并生成悬浮窗体提示
- Android 实现直接拒接来电
- android 2.1 监听电话状态并自动接听来电