有没有办法以编程方式知道iPhone上的手机载体?
我正在寻找iPhone连接的运营商名称.
我正在开发一个iPhone应用程序,并且非常想确定设备是否正在漫游,以便我可以智能地避免在用户家庭网络之外花费昂贵的连接.
我写的应用程序是用于越狱手机,但如果可能的话,我更愿意使用标准的SDK.
这是我已经找到的:
1. Apple SDK: 在Apple文档中,我在Apple的SCNetworkReachability API中找到了承诺.通过API,您可以访问WIFI或手机网络,当前是否建立了网络连接等.但是,搜索SCNetworkReachability API参考pdf以获取"漫游"或"漫游"两者均为nil.他们的示例代码也是如此.
2.越狱iPhone FS的Grep: 首选项 - >常规 - >网络选项卡是用户可以打开或关闭漫游的地方.查看plist文件("/Applications/Preferences/Network.plist"),我能够找到以下引用:
PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
cell = PSSwitchCell;
default = 1;
defaults = "com.apple.commcenter";
key = InternationalRoamingEDGE;
label = "EDGE_ROAMING_TOGGLE";
requiredCapabilities = (
telephony
);
Run Code Online (Sandbox Code Playgroud)
这当然是一个领先者,因为看起来我可以注册用户更改了InternationalRoaming设置的通知.尽管如此,我不确定如何将其变成他们实际上正在漫游的知识.
3.检查SpringBoard的类转储源: 我使用class-dump转储了SpringBoard的类.我无法找到任何"漫游"或"漫游"的引用
4.显然我开始在SO检查这个: 找不到任何相关的东西.
进一步的步骤:有人在这里有任何建议吗?我知道这是可能的.但苹果显然很难找到它.我非常怀疑,如果不使用私有框架,这是可能的.(例如CoreTelephony).由于这是一个越狱的应用程序,我可能会使用SpringBoard中的注入代码来屏幕抓取运营商名称,但我真的更愿意不去那条路线.任何建议都非常感谢.谢谢.
我正在尝试创建一个应用程序,该应用程序将在类似呼叫中心的列表上发起对优先级为1的联系人的呼叫.
然后,如果该联系人没有回答(让我们忘记在这里回答机器的整个问题),我想打电话给优先级2联系人,依此类推,直到他们中的一个回答或我耗尽我的名单.
这可能吗?
我尝试过以下方法:
CTCallCenter.CallEventHandler事件,并检查呼叫状态CTCallStateConnected和CTCallStateDisconnected,我得到它来响应呼叫断开的事实,没有连接,然后尝试启动另一个呼叫,就像我做的第一次,但第二次尝试只是坐死在水里.DidEnterBackground方法,并定期检查CTCall.CallState属性,基本上再次尝试响应从未连接的断开连接,但这似乎不起作用在尝试下一次拨号之前检测到断开状态后,我还尝试添加一个短暂的延迟(1秒,2.5秒和10秒),以允许电话应用程序在中止呼叫后"安定下来",这没有任何改变.
有没有办法以编程方式获取有关iPhone载体的信息?
对于 iOS 16,CTCarrier 似乎已被弃用。
https://developer.apple.com/documentation/coretelephony/ct Carrier
今后接收有关 MCC、MNC 和 ISO 国家/地区代码等运营商信息的正确方法是什么?
在我的公司,我们使用这些信息作为数据点来协助诈骗者检测和其他一些小但相对重要的事情,例如:限制来自我们因定价原因不支持的国家/运营商的电话号码登录。
我找不到任何有关此弃用背后原因的 WWDC 视频,也找不到支持此信息的新类。
我使用以下代码获取有关我的iPhone的网络信息 -
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *osVersion = [[UIDevice currentDevice] systemVersion];
Run Code Online (Sandbox Code Playgroud)
但我得到错误 -
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
objc-class-ref in MyClass.o
ld: symbol(s) not found for architecture armv7
Run Code Online (Sandbox Code Playgroud)
该类不是iOS SDK的一部分吗?我究竟做错了什么?
我希望能够有选择地阻止我正在编写的iOS应用程序中的传入呼叫.这是供个人使用,而不是App Store,所以我可以使用私有API来完成此任务.
我最近遇到了核心电话框架.有没有办法使用这个框架来阻止调用?如果没有,我可以使用哪些私有API来执行此操作?
最近更新到iOS 12.1(从12.0开始)和Xcode 10.1(从10.0开始),并且在我的物理设备上进行调试时,在Xcode控制台中看到大量错误消息,如下所示:
[NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x28051d700, domain=1, instance=1>
我每隔几秒钟就会收到几个这样的日志,唯一改变的是CTServiceDescriptor的十六进制值。没有代码更改,因此我必须假定其与iOS或Xcode更新有关。
据我所知,它似乎并未对性能产生任何影响,该应用程序正在按预期运行,并且我的手机正在运行(甚至可以更新其信号强度!)。我在Stack Overflow,Google或Apple Developer论坛上找不到任何有用/相关的信息,尽管我发表了与后者类似的帖子,一旦该帖子获得批准,我将在此处链接。
对于如何进一步解决或解决问题的任何建议/见解,我们将不胜感激。谢谢!
旧方法不再起作用:
//方式1
void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
NSString* (*getPhoneNumber)() = dlsym(lib, "CTSettingCopyMyPhoneNumber");
if (getPhoneNumber == nil) {
NSLog(@"getPhoneNumber is nil");
return nil;
}
NSString* ownPhoneNumber = getPhoneNumber();
Run Code Online (Sandbox Code Playgroud)
//方式2
extern NSString* CTSettingCopyMyPhoneNumber();
NSString *phone = CTSettingCopyMyPhoneNumber();
Run Code Online (Sandbox Code Playgroud)
相关问题:
[UPDATE]
提供的方法适用于不带JB的iOS 6.1.4和带有JB的iOS 7.1.2
感谢用户creker提示!
要获得号码,您必须使用以下方式:
1.代码
-(NSString*) getMyNumber {
NSLog(@"Open CoreTelephony");
void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);
NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
NSString* (*pCTSettingCopyMyPhoneNumber)() = dlsym(lib, "CTSettingCopyMyPhoneNumber");
NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
if (pCTSettingCopyMyPhoneNumber == nil) {
NSLog(@"pCTSettingCopyMyPhoneNumber is nil");
return nil;
} …Run Code Online (Sandbox Code Playgroud) 有没有办法跟踪iPhone上的手机数据使用情况?有很多应用程序像'Dataman'和'DataUsage'那样做同样的事情
基本上我正在寻找一种编程方式来获取存储在设置 - >常规 - >用法中的信息
任何帮助将不胜感激.
core-telephony ×10
ios ×7
iphone ×6
carrier ×1
cocoa-touch ×1
ios16 ×1
ios7 ×1
jailbreak ×1
objective-c ×1
phone-number ×1
swift ×1
xcode ×1