CoreTelephony框架-运行商-通话状态监听
来源:互联网 发布:在哪里购买淘宝店铺 编辑:程序博客网 时间:2024/05/24 16:17
目前只知道可以拿来做两件事情:1. 知道目前你这只 iPhone 用的是哪个电信商的服务;2. 知道现在 iPhone 是不是在打电话。
※ 电信商资讯
用 CTTelephonyNetworkInfo 与 CTCarrier 这两个 class,就可以取得电信商资讯,例如:
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = info.subscriberCellularProvider;
NSLog(@"carrier:%@", [carrier description]);
倒出来的结果像是:
CTCarrier (0x140dc0) {
Carrier name: [中国移动]
Mobile Country Code: [466]
Mobile Network Code:[92]
ISO Country Code:[tw]
Allows VOIP? [YES]
}
然后,如果你对 CTTelephonyNetworkInfo 喂一个 block 进去,像是:
info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {NSLog(@"carrier:%@", [carrier description]);};
如 此一来,当你的 iPhone 漫游到了其他网路的时候,就会执行你这段 block,但光是知道手机现在漫游在哪个电信商的网路里头,大概能做的,就是一些跟电信商关系密切的服务之类,你或许可以决定软体里头有哪些功能,一定 要在某个电信商的网路才能用;电信商自己做 iPhone 软体的时候大概会想做这种事情。
※ 通话资料
用 CTCallCenter 与 CTCall 这两个 class,便可以知道目前 iPhone 是否在通话中。CTCallCenter 的用途是用来监控是不是有电话打进来、正在接听、或是已经挂断,而 CTCall 则是将每一则通话事件包装成一个物件。我们先写一小段程式-
CTCallCenter *center = [[CTCallCenter alloc] init];
center.callEventHandler = ^(CTCall *call) {
NSLog(@"call:%@", [call description]);
};
然后,在实机上执行,接著打通电话到这支 iPhone 上,打通电话进去,然后马上挂断(人好端端的,干嘛为了测试程式跟自己的电话费帐单过不去呢?)就可以看到 iPhone 执行了我们的 block,把 CTCall 物件倒出来:
CTCall (0x143400) {
callState: [CTCallStateIncoming]
Call ID: [CE5F9337-1990-4254-8797-1CCEA85B061B]
}
CTCall (0x10bac0) {
callState: [CTCallStateDisconnected]
Call ID: [CE5F9337-1990-4254-8797-1CCEA85B061B]
}
CTCall 物件只有两个属性,一是通话状态(来电中、通话中…),二是这则通话的 unique id,除此之外没有其他资讯,你没办法知道这通电话是从哪里打来的,只能知道有电话进来而已,也没办法透过这个 API 打电话出去。
大抵上可以想到的用途,就是当你的程式执行到一半的时候,程式流程被电话打断,这时候就可能要中断原本正在做的事情,在通话结束之后恢复。
最后,CTCallCenter 与 CTTelephonyNetworkInfo,在模拟器上是没有办法用的,呼叫 alloc、init 之后回传的结果只会是 nil。
在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; //调用safar打开网页 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.cnblogs.com/foxmin"]];////调用app store (省略号后面加的是产品的id等一些参数)// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.apple.com/app/……"]];// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/app/ "]];////调用电话// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://XXXXX"]];////调用SMS// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://XXXXX"]];////调用Remote// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"remote://XXX"]]; return YES;}
查看更多iPhone应用程序的调用和第三方应用程序的调用,可以在iPhone的URL方案查看。下面列举部分:
Apple iPhone Applications
Safari
Any URL starting with http:// which does not point to maps.google.com or www.youtube.com is sent to Safari:
NSString *stringURL = @"http://wiki.akosma.com/";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Apparently feed:// opens http://reader.mac.com in Safari.
Maps
URLs starting with http://maps.google.com open up the "Maps" application automatically:
NSString *title = @"title";float latitude = 35.4634;float longitude = 9.43425;int zoom = 13;NSString *stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@@%1.6f,%1.6f&z=%d", title, latitude, longitude, zoom];NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
It seems that maps:// also opens up the Maps application.
Phone
The phone links start with "tel:" but must not contain spaces or brackets (it can contain dashes and "+" signs, though):
NSMutableString *phone = [[@"+ 12 34 567 89 01" mutableCopy] autorelease];[phone replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [phone length])];[phone replaceOccurrencesOfString:@"(" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [phone length])];[phone replaceOccurrencesOfString:@")" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [phone length])];NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", phone]];[[UIApplication sharedApplication] openURL:url];
SMS
To open the SMS application, just use the sms: protocol in your URL:
NSString *stringURL = @"sms:";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
You can specify a phone number, but apparently not a default text for your message:
NSString *stringURL = @"sms:+12345678901";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
The same restrictions apply as for phone URLs, regarding spaces, brackets and dashes.
These URLs launch Mail and open the compose message controller:
NSString *stringURL = @"mailto:test@example.com";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
You can also provide more information, for a customized subject and body texts:
NSString *subject = @"Message subject";NSString *body = @"Message body";NSString *address = @"test1@akosma.com";NSString *cc = @"test2@akosma.com";NSString *path = [NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@&body=%@", address, cc, subject, body];NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];[[UIApplication sharedApplication] openURL:url];
You might also omit some information:
NSString *subject = @"Message subject";NSString *path = [NSString stringWithFormat:@"mailto:?subject=%@", subject];NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];[[UIApplication sharedApplication] openURL:url];
For more complex body texts, you might want to use the CFURLCreateStringByAddingPercentEscapes() function, as explained above in this page.
YouTube
URLs starting with http://www.youtube.com open up the "YouTube" application automatically:
NSString *stringURL = @"http://www.youtube.com/watch?v=WZH30T99MaM";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
It also works with this URL (which normally brings the Flash video player used by YouTube):
NSString *stringURL = @"http://www.youtube.com/v/WZH30T99MaM";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
iTunes
To open up iTunes, use this URL:
NSString *stringURL = @"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
App Store
Very similar to the iTunes URLs:
NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=294409923&mt=8";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
iBooks
(source: http://akos.ma/aqdr)
NSString *stringURL = @"itms-books:";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
NSString *stringURL = @"itms-bookss:";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Third Party Applications
Most URL schemes in this list come from App Lookup.
AirSharing
Launch the application:
NSString *stringURL = @"airsharing://";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Alocola
Launch the application:
NSString *stringURL = @"alocola://";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Appigo Notebook
Launch the application:
NSString *stringURL = @"appigonotebook://";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Appigo Todo
Launch the application:
NSString *stringURL = @"appigotodo://";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Create a new task:
NSString *template = @"appigotodo://com.example.xyzapp/import?name=%@¬e=%@&due-date=%@&priority=%@&repeat=%@";NSString *name = @"Buy%20some%20milk";NSString *note = @"Stop%20on%20the%20way%20home%20from%20work.";NSString *dueDate = @"2009-07-16";NSString *priority = @"1";NSString *repeat = @"101";NSString *stringURL = [NSString stringWithFormat:template, name, note, dueDate, priority, repeat];NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
Duo
Launch the application and pre-populate the update field with your desired Tweet/Facebook update. Optional: Provide Duo with the custom URL and return path to your app to provide the user with a button to return to your app.
NSString *appID = @"Your Apps Name";NSString *updateInfo = @"The Tweet/Status Update";NSString *returnScheme = @"Your Apps Return URL Scheme";NSString *returnPath = @"Your/Apps/Return/Path";NSString *baseURL = @"duoxx://updateFaceTwit?";NSString *encodedUpdateInfo = [updateInfo stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];NSString *urlString = [NSString stringWithFormat:@"%@BLappID=%@;BLupdateInfo=%@;BLreturnScheme=%@;BLreturnPath=%@", baseURL, appID, encodedUpdateInfo, returnScheme, returnPath];NSURL *url = [NSURL URLWithString:urlString];[[UIApplication sharedApplication] openURL:url];
The Cartographer
Launch app and add a placemark at given coordinate:
NSString *title = @"Placemark title (optional)";NSString *summary = @"Placemark description (optional)";CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(123.0, 12.0);title = [(id)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)title, NULL, (CFStringRef)@";/?:@&=+$,", kCFStringEncodingUTF8) autorelease];summary = [(id)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)summary, NULL, (CFStringRef)@";/?:@&=+$,", kCFStringEncodingUTF8) autorelease];NSString *cartographerURL = [NSString stringWithFormat:@"cartographer://placemark?coordinate=%lf,%lf&title=%@&summary=%@", coordinate.latitude, coordinate.longitude, title, summary];NSURL *url = [NSURL URLWithString:cartographerURL];[[UIApplication sharedApplication] openURL:url];
Launch app and load either a KML source or a Google My Map:
NSString *sourceURL = @"http://....";// e.g. http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=208320711678395936256.00046bbcfdcd1f3ebf64b&z=5// Optional:MKCoordinateRegion region = ...;sourceURL = [sourceURL stringByAppendingFormat:@"&ll=%lf,%lf&spn=%lf,%lf", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta];NSURL *url = [NSURL URLWithString:[sourceURL stringByReplacingOccurrencesOfString:@"http://" withString:@"cartographer://"]];[[UIApplication sharedApplication] openURL:url];
ChatCo
NSString *stringURL = @"irc://irc.example.domain/roomName";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
NSString *stringURL = @"irc://irc.example.domain/Nickname@roomName";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
NSString *stringURL = @"irc://irc.example.domain/Nickname!Realname@roomName";NSURL *url = [NSURL URLWithString:stringURL];[[UIApplication sharedApplication] openURL:url];
- CoreTelephony框架-运行商-通话状态监听
- 通话录音和CoreTelephony框架的简单使用
- 安卓通话状态监听
- ios 关于通话状态监听
- CoreTelephony框架
- CoreTelephony框架
- CoreTelephony框架
- Swift3.0拨打电话,获取通话状态(接通,挂断...)<CoreTelephony,CallKit.CXCallObserver>
- 电话通话几种状态的监听
- Android之监听phone的通话状态
- android广播监听手机通话状态
- IOS监听通话状态(私有API)
- ios 开发在应用中监听(判断)来电状态-接听-拒接-CoreTelephony
- 在服务中监听电话的通话状态
- 安卓phone对通话状态的监听
- Android VoLTE 视频通话是否可用状态读取与监听
- Android VoLTE 视频通话是否可用状态读取与监听
- CoreTelephony框架的简单使用
- Java中怎样保留小数的有效位数,即从第一个不是0的数开始算起
- ACMICPC比赛的经验
- 将论文中的所有参考文献编号批量上标化
- 使用 C++ 处理 JSON 数据交换格式
- Beyond Compare脚本:比较文件并生成html格式的差异报告
- CoreTelephony框架-运行商-通话状态监听
- Android初级教程_获取Android控件的宽和高
- Linux下时间/时区的设置
- dom4j解析xml详解
- mysql查找重复行且按某种条件保留数据
- Extjs之技巧(一)
- Android Audio System 之二:AudioFlinger
- hdu 1518——Square
- Linux设备驱动程序学习-中断处理