场景:iOS平台5+插件开发
功能:监听通话状态
报错:[NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x28393a400, domain=1, instance=1>  
iOSSDK:2.0.1.64837_20190614
macOS:10.14.5
xcode:10.2.1
手机:iphone6
ios:12.3.1  
==Native代码========================
--CallCenter.h---------------------------------
#include "PGPlugin.h"  
#include "PGMethod.h"  
#import <CoreTelephony/CTCallCenter.h>  
#import <CoreTelephony/CTCall.h>  
@interface CallCenter : PGPlugin  
@property (nonatomic, strong) CTCallCenter *callCenter;  
- (void)CallEvent:(PGMethod*)command;  
@end
--CallCenter.m---------------------------------
#import "CallCenter.h"  
@implementation CallCenter  
- (void)CallEvent:(PGMethod*)command  
{  
    if(command) {  
        NSString* cbId = [command.arguments objectAtIndex:0];  
        CTCallCenter *callCenter = [[CTCallCenter alloc] init];  
        callCenter.callEventHandler = ^(CTCall* call) {  
            NSLog(@"%@ \n",call.callState);  
            [self toSucessCallback:cbId withString:call.callState keepCallback:true];  
        };  
    }  
}  
@end
==feature.plist========================================
<key>CallCenter</key>  
    <dict>  
        <key>class</key>  
        <string>CallCenter</string>  
        <key>global</key>  
        <false/>  
    </dict>
==js代码==================================================
// 声明的JS“扩展插件别名”  
                var bridge = window.plus.bridge;  
                window.plus.CallCenter = {  
                    // 声明异步返回方法  
                    CallEvent: function(successCallback, errorCallback) {  
                        var success = typeof successCallback !== 'function' ? null : function(args) {  
                                successCallback(args);  
                            },  
                            fail = typeof errorCallback !== 'function' ? null : function(code) {  
                                errorCallback(code);  
                            };  
                        callbackID = bridge.callbackId(success, fail);  
                        // 通知Native层plugintest扩展插件运行”PluginTestFunction”方法  
                        return bridge.exec('CallCenter', "CallEvent", [callbackID]);  
                    }  
                };  
                plus.device.dial("10086", false);  
                plus.CallCenter.CallEvent(function(callState) {  
                    console.log(callState);  
                });
日志跟踪js已经通过bridge调到native代码,通话结束后报出这个错误日志
[NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x28393a400, domain=1, instance=1>  
这功能我之前成功实现发布过,当时的环境是
IOS-SDK:1.9.9.44932_20180511
xcode:9
            
            
            
            
1 个回复
z***@aliyun.com (作者) - 80后IT男..
问题解决了,改了CallCenter.m中2处就好了:
self.callCenter = [[CTCallCenter alloc] init];
self.callCenter......
至于那个日志貌似与这个无关,还是报,但是功能正常了。