今天接到一个监听状态的需求,当使用 App 时若电话介入需要对当前状态进行监听操作(注:并非通话内容),根据不同的状态实行相关的需求操作,废话不多说步骤如下.

首先,常规操作先引用对应的头文件,来为后续功能铺路.

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

其次,需要设置一个全局的属性,若在 viewDidLoad 方法中创建该属性的话, viewDidLoad 调用结束该创建的属性就会被销毁掉,则后续方法步骤都将失效,从而无法检测到来点状态.

/** 呼叫中心*/
@property (nonatomic, strong) CTCallCenter *callCenter;

再其次,便是具体监听逻辑,code 如下.

#pragma mark - ************************************************ (监听电话相关)
/**
监听电话介入
*/
- (void)monitorTelephoneCall {
kWeakSelf(self); // MsgAppStarting
// MsgAppReactivate
_callCenter = [[CTCallCenter alloc] init];
_callCenter.callEventHandler = ^(CTCall * call) {
if ([call.callState isEqualToString:CTCallStateDisconnected]) {// Call has been disconnected
NSLog(@"电话 --- 断开连接");
}
else if ([call.callState isEqualToString:CTCallStateConnected]) {// Call has just been connected
NSLog(@"电话 --- 接通");
// 通知 H5 当前截屏操作
dispatch_async(dispatch_get_main_queue(), ^{
// do somethings
}); }
else if ([call.callState isEqualToString:CTCallStateIncoming]) {// Call is incoming
NSLog(@"电话 --- 待接通");
}
else if ([call.callState isEqualToString:CTCallStateDialing]) {// Call is Dialing
NSLog(@"电话 --- 拨号中");
// 通知 H5 当前截屏操作
dispatch_async(dispatch_get_main_queue(), ^{
// do somethings
}); }
else {// Nothing is done"
NSLog(@"电话 --- 无操作");
}
};
}

注:若需要对 UI 方面进行调试,需要提前进行主线程的调度,不然会造成 crash.

此次分享到此结束,希望内容能对大家实际有所帮助,有什么不足之处欢迎指点共同进步!

电话状态监听 - iOS的更多相关文章

  1. 截屏状态监听 - iOS

    既接到电话状态监听的需求之后再次添加了截屏状态的监听,当使用 App 时若用户执行截屏操作需要对当前状态进行监听操作,下面有两种方法,其中可以替换截屏的图片内容(Plan A),也可以弹出提示框(Pl ...

  2. iOS实现电话状态监听 CoreTelephony

    在程序中如果需要监听电话状态,可以引入CoreTelephony框架,这个框架包含了电话相关的API,可以实现监测来电,查看运营商信息等功能.下面就是具体的实现监测来电的代码.一定要把center写成 ...

  3. 短信状态监听 - iOS

    当使用 App 时若短信介入需要对当前状态进行监听操作,根据不同的状态实行相关的需求操作,废话不多说步骤如下. 首先,常规操作先引用对应的头文件,来为后续功能铺路. #import <Messa ...

  4. 录屏状态监听之防录屏 - iOS

    继之前接到电话.短信和截屏监听需求之后,在 iOS 11.0 系统之上新增了屏幕录制的新功能玩法,所以也随之迎来了新的屏幕录制监听的需求,即防录屏功能监听 ... 通过官方文档得知 capturedD ...

  5. android 呼入电话的监听(来电监听)转

    需要权限: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 方式一:通过广 ...

  6. Android 对电话进行监听和挂断

    1.添加权限 <!--拨打电话的权限--><uses-permission android:name="android.permission.PROCESS_OUTGOIN ...

  7. Android USB大容量存储时SD卡状态监听(转)

    对SD卡状态监听,到现在为止我知道的有两种方式: 1.注册StorageEventListener来监听sd卡状态 StorageEventListener中有onStorageStateChange ...

  8. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转-b

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  9. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

随机推荐

  1. CAD安装失败怎样卸载CAD 2015?错误提示某些产品无法安装

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  2. nginx 访问路径配置

    比如: http://127.0.0.1/ 对应的物理路径 c:/a/b/c 比如:http://127.0.0.1/eec 访问的地址对应的物理路径: d:/a/b/c #user nobody; ...

  3. 利用jquery给指定的table动态添加一行、删除一行,复制,值不重复等操作

    $("#mytable tr").find("td:nth-child(1)") 1表示获取每行的第一列$("#mytable tr").f ...

  4. 微信小程序电商实战-入门篇

    小程序开发工具有新版本更新啦!开发体验更好了,详情可以查看微信公众平台-小程序https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/devtools.h ...

  5. 移动端absolute元素居中

    <div class="db"> <div class="dm"></div> </div> .db{ widt ...

  6. 使用windows资源管理器打开jar

    在命令行里输入: assoc .jar=CompressedFolder

  7. One special dictionary

    由于项目一个功能需要,可以将关键字的值叠加加来,最终可以获取对这些关键字都做了些什么操作. Generic Programming is very powerful. /// <summary& ...

  8. css3照片墙

    一张张照片散乱的撒在一起,鼠标悬浮时旋转放大并摆正,效果如下图(所有图片均来自网络),主要使用到的css3属性有:transition.transform(scale.rotateZ).box-sha ...

  9. GDB多线程调试分析

    0x00: 在Linux系统上Gdb提供了一组多线程调试命令,如表所示: 多线程调试的主要任务是准确及时地捕捉被调试程序线程状态的变化的事件,并且GDB针对根据捕捉到的事件做出相应的操作,其实最终的结 ...

  10. 【起航计划 030】2015 起航计划 Android APIDemo的魔鬼步伐 29 App->Preferences->Preferences from code

    这里我们使用类比的方法,将 PreferenceActivity 与一般的Activity 作个类比,可以更好的理解Android.Preference中的各个类. PreferenceActivit ...