【问题标题】:How to call from application to phone number如何从应用程序拨打电话号码
【发布时间】:2011-10-25 21:07:59
【问题描述】:

我正在显示名片视图,在该视图上我有一个按钮,我将按钮标题设置为解析后得到的电话号码字符串。我在按钮标题上获得了完美的电话号码字符串值。现在通过按下该按钮,我想调用默认电话应用程序,以便用户可以调用。

 -(void) BcardDisp: (id)sender
   {
BGView.hidden = NO;
if(BcardView.hidden == YES)
{

BcardView.hidden = NO;

NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
    marker *aMarker = (marker *)[appDelegate.markers objectAtIndex:selectedIndexPath.row];
for (int selectedIndexPath = 0; selectedIndexPath < [appDelegate.markers count]; selectedIndexPath++)
{

ShowroomName.text = aMarker.name;
    Address_Bcard.numberOfLines=3;
    Address_Bcard.text =aMarker.address;

    [p_Bcard setTitle:[NSString stringWithFormat:@"%@",aMarker.phone]  forState:UIControlStateNormal];
}
    [self.tableView deselectRowAtIndexPath:selectedIndexPath animated:YES];
}

}

对于来电号码,我在按钮上使用以下操作。

 - (IBAction)callfrom_BcardVeiw
  {
marker *aMarker = [[marker alloc] init];
NSURL *phoneNumberURL = [NSURL URLWithString:[NSString stringWithFormat:@"%d",aMarker.phone]];

[[UIApplication sharedApplication] openURL:phoneNumberURL];
NSLog(@"%d",phoneNumberURL);

  } 

但我无法调用.....获得抢夺价值。我应该在我的 - (IBAction)callfrom_BcardVeiw .... 下放置什么逻辑,以便我可以调用与按钮标题字符串相同的号码。

【问题讨论】:

  • 大家好...我们也可以通过url调用编辑联系人窗口吗?我正在通过应用程序添加联系人,我想打开刚刚添加的详细信息的联系人窗口,以便用户保存或丢弃

标签: iphone phone-call


【解决方案1】:

试试这个:

NSURL *phoneNumberURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",aMarker.phone]];

【讨论】:

  • 它仍然给我作为 1051136 而不是“022 2294 8602”的抓取值,因为我把 NSLog .....无法调用:(
  • 用 %@ 代替 %d 试试,你确定电话号码正确吗?
  • 您创建了一个对象标记,但没有给该对象添加任何值,除非您在 init 方法中使用默认值进行初始化,如果您没有 aMarker.phone 具有垃圾值
  • 是的,我已经将自定义按钮标题设置为 022 2294 8602,我完全可以得到它。但是通过按下相同的按钮对其进行操作不起作用。
  • 顺便说一下,我尝试 %@ this....这个只有 4 位数字的开放呼叫应用程序。我的意思是 iPhone 通话以 6865 号码开头,而不是 022 2294 8602
【解决方案2】:

在电话 URL 前加上“tel://”。

也要小心,aMarker.phone 是整数还是字符串?

在你的代码的一部分你使用“%d”,所以它假设它是一个整数,而在你的代码的另一部分你使用“%@”,它假设它是一个NSObject,可能是一个@ 987654322@.

我敢打赌电话号码是一个字符串(因为它可以包含数字以外的字符,即“+”表示国际前缀,或“*”或“#”表示某些服务......)所以你需要使用@ 987654323@ 而不是 @"tel://%d" 否则它会在你的 URL 中格式化奇怪的值(确切地说是内存中字符串的地址)而不是实际的电话号码。

另一方面,如果电话号码是一个整数(会很奇怪,但您使用“%d”让我感到困惑)并且您使用“%@”,您的代码将崩溃,尝试访问描述方法一些不是 NSObject 的整数值(它会将整数视为 NSObject 在内存中的地址,而事实并非如此,这将解释 BAD_ACCESS)

【讨论】:

  • 不要加//,只加tel:就行了,还要问系统能不能打开url。因为您的应用程序可能在 iPad 或 iPod touch 上运行,而这不会允许手机全部使用。
  • yes 使用 %@ 拨打电话,但只能使用 4 位数字 6855 而不是 022 2294 8602
【解决方案3】:

删除任何空格或其他不需要的章程:

NSString *phoneNumber = [aMarker.phone stringByReplacingOccurrencesOfString:@" " withString:@""];

NSURL *phoneNumberURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", phoneNumber]];

if ([[UIApplication sharedApplication] canOpenURL:phoneNumberURL ]) {
   [[UIApplication sharedApplication] openURL:phoneNumberURL];
} else {
   // iPad or iPod Touch, can't make a call
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2012-03-02
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多