27

我正在尝试使用以下方式从 ios 应用程序拨打电话号码:它不起作用,尽管该方法被调用:

-(IBAction)callPhone:(id)sender {

        NSString *phoneCallNum = [NSString stringWithFormat:@"tel://%@",listingPhoneNumber ];

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneCallNum]];

        NSLog(@"phone btn touch %@", phoneCallNum);
    }

NSLog输出:电话 btn touch tel://+39 0668806972

4

5 回答 5

89

你的代码是正确的。你检查了真实的设备。此功能在模拟器中不起作用。

也试试这个,

NSString *phNo = @"+919876543210";
NSURL *phoneUrl = [NSURL URLWithString:[NSString  stringWithFormat:@"telprompt:%@",phNo]];

    if ([[UIApplication sharedApplication] canOpenURL:phoneUrl]) {
        [[UIApplication sharedApplication] openURL:phoneUrl];
    } else
    {
        calert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Call facility is not available!!!" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
        [calert show];
    }

** Swift 3 版本**

if let url = URL(string: "telprompt:\(phoneNumber)") {
  if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(call, options: []) { result in
       // do something with result
    }
  }
}
于 2013-09-20T10:18:54.963 回答
14

电话无法在模拟器/iPod/iPad 上运行,您需要在带有有效 SIM 卡的 iPhone 上运行该应用程序。

调用电话应用程序的 URL 方案也是tel:<phone_number>. 参考苹果文档。

理想情况下,您应该检查设备是否具有电话模块,然后执行openURL:呼叫。使用此代码执行检查,

if([[UIApplication sharedApplication] canOpenURL:callUrl]) {
    [[UIApplication sharedApplication] openURL:callUrl];
}
else {
    //Show error message to user, etc.
}
于 2013-09-20T10:15:00.793 回答
5

使用以下方法拨打电话:

 NSString *phoneNumber = [@"tel://" stringByAppendingString:number];
 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
于 2013-09-20T10:14:51.597 回答
0

您可以尝试如下。

NSString *phoneNumber = [@"tel://" stringByAppendingString:Number];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];

希望它可以帮助你。

于 2013-09-20T10:12:42.467 回答
0
 NSString *phoneNumber = [@"tel://" stringByAppendingString:@"9414481799"];
 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];

这只会在设备上运行。

于 2013-09-20T10:17:56.553 回答