Android实现来电和去电的监听
来源:互联网 发布:淘宝怎样付款 编辑:程序博客网 时间:2024/06/06 01:19
写个实例实现Android中来电和去电的监听,来电可以使用PhoneStateListener对电话状态的改变进行监听,去电需要动态或者静态去注册广播接收器,对去电进行监听;
来电:
来电所对应的三种静态成员常量:
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功能与权限描述大全
测试结果如下:
阅读全文
1 0
- Android实现来电和去电的监听
- Android来电监听和去电监听
- Android来电监听和去电监听
- Android来电监听和去电监听
- Android来电监听和去电监听
- android 电话状态监听(来电和去电)实现代码
- android 电话状态监听(来电和去电)实现代码
- android-轻松监听来电和去电
- [AndroidTips]Android监听来电和去电
- android-轻松监听来电和去电
- Android监听来电和去电
- android-轻松监听来电和去电
- android-轻松监听来电和去电
- Android监听来电和去电
- Android 监听手机来电和去电
- Android监听来电和去电
- android 监听来电 和 去电
- android 电话状态的监听(来电和去电)
- 4.this关键字
- cocos2d中缓动action的UI示意
- python从入门到实践:9-6 冰淇淋小店
- Leetcode 99. Recover Binary Search Tree O(1)
- 我的项目管理模型
- Android实现来电和去电的监听
- 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB
- Matlab 实现字符串分割(split)
- Akka(20): Stream:异步运算,压力缓冲-Async, batching backpressure and buffering
- Python 微博画像分析
- VCC、VDD、VDDA、VSS
- Ubuntu16.04 安装anaconda3
- JndiObjectFactoryBean 配置数据源
- Linux 系统概述