2

如何在应用程序内拨打电话或在通话结束后立即启动应用程序?我知道这是可能的,因为应用商店中的一些应用已经在这样做了。

4

4 回答 4

6

我从 Apple 网站获得了这段代码,它运行良好:

-(IBAction) dialNumber:(id)sender{

NSString *aPhoneNo = [@"tel://" stringByAppendingString:[itsPhoneNoArray objectAtIndex:[sender tag]]] ; NSURL *url= [NSURL URLWithString:aPhoneNo];
 NSURL  *url= [NSURL URLWithString:aPhoneNo];
NSString *osVersion = [[UIDevice currentDevice] systemVersion];

if ([osVersion floatValue] >= 3.1) { 
UIWebView *webview = [[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 
[webview loadRequest:[NSURLRequest requestWithURL:url]]; 
webview.hidden = YES; 
// Assume we are in a view controller and have access to self.view 
[self.view addSubview:webview]; 
[webview release]; 
} else { 
// On 3.0 and below, dial as usual 
[[UIApplication sharedApplication] openURL: url];
}


}
于 2011-08-09T11:44:07.647 回答
3

我认为这有两个部分

  1. 应用程序已经在运行,并且用户收到一个提示,表明有电话进来,并要求接受或拒绝
  2. 用户接到电话,但应用程序未运行

在第一种情况下,您的UIApplicationDelegate将收到消息application:willChangeStatusBarFrame:, application:didChangeStatusBarFrame:,applicationWillResignActive:applicationDidBecomeActive:所有可能多次,这取决于用户是否选择接听电话,以及applicationWillTerminate:他们是否选择离开您的应用程序。您还可以使用NSNotificationCenter从未注册为应用程序委托的类中观察这些事件,有关详细信息,请参阅UIApplication类参考的“通知”部分。

在第二种情况下,我不知道官方 SDK 是否可以在电话结束时启动您的应用程序。您能否提供执行此操作的应用程序列表?

编辑:

我想我现在明白你的意思了。你应该听从@jessecurry 的建议,openURL使用UIApplication协议tel:会打电话。至于他们声称“做不可能的事情”并且在拨打电话时不退出应用程序,我不确定他们是如何做到的,因为我没有写它。他们可能正在使用 Skype 等外部 VOIP 服务,或者只是将tel:URL 加载到不可见的网页表中。这两个我都不能评论,因为我还没有尝试过。

于 2010-02-22T17:34:04.937 回答
1

它是通过使用 telprompt 而不是 tel 来完成的。请看下面的代码

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:18004912200"]];

于 2012-08-22T09:04:15.320 回答
0

如果您想从您的应用程序中拨打电话,您可以使用tel:网址。

这是一个将电话号码作为字符串并发起呼叫的方法。

- (void)dialNumber: (NSString*)telNumber
{
    // fix telNumber NSString
    NSArray* telComponents = [telNumber componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
    telNumber = [telComponents componentsJoinedByString: @""];

    NSString* urlString = [NSString stringWithFormat: @"tel:%@", telNumber];
    NSURL* telURL = [NSURL URLWithString: urlString];
    //NSLog( @"Attempting to dial %@ with urlString: %@ and URL: %@", telNumber, urlString, telURL );

    if ( [[UIApplication sharedApplication] canOpenURL: telURL] )
    {
        [[UIApplication sharedApplication] openURL: telURL];
    }
    else
    {
        UIAlertView* alert = [[UIAlertView alloc] initWithTitle: NSLocalizedString( @"Dialer Error", @"" ) 
                                                        message: [NSString stringWithFormat: NSLocalizedString( @"There was a problem dialing %@.", @"" ), telNumber] 
                                                       delegate: nil 
                                              cancelButtonTitle: NSLocalizedString( @"OK", @"" ) 
                                              otherButtonTitles: nil];
        [alert show];
        [alert release];
    }
}
于 2010-02-22T17:25:01.000 回答