#pragma mark - 发短信(调用系统短信程序)
/**
* 这种方式的缺点是没办法从系统短信回到自己的应用程序
* 首先通过[[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"sms://"]]来判断当前的设备是否能跳转到系统的短信程序,如果能的话直接通过openUrl跳转到系统的短信发送界面来发送短信,如果不能跳转,提醒用户当前设备不能发送短信
*
* 模拟器不能发送短信
*/
- (IBAction)sendMessage:(id)sender
{
NSURL *url = [NSURL URLWithString:@"sms:10086"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];// 通过openUrl:可以实现调用系统电话 短信 邮件 浏览器 地图和手机内的第三方程序等功能,sms:// 后面跟的是要发送短信的人的号码
}else{
UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"该设备不能发送短信" message:nil delegate:self cancelButtonTitle:@"关闭" otherButtonTitles: nil];
[alterView show];
}
}
#pragma mark - 打电话
- (IBAction)takePhone:(id)sender
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];
}
#pragma mark - 发邮件
- (IBAction)sendEmail:(id)sender
{
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mailto://***@email.com"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://***@email.com"]];
}
}
#pragma mark - 在程序内直接发送短信
- (IBAction)sendMessageInApp:(id)sender {
/**
* 这种方法的优点是不用跳出程序,直接在当前程序完成短信发送功能
* iOS4.0提供了MFMessageComposeViewController和MFMessageComposeViewControllerDelegate来进行短信发送,可以不用跳出程序外
* 如果直接在程序内发短信的话,使用MFMessageComposeViewController,需要导入UIMessageUI.framework
* 在使用之前必须检查canSendText方法,若返回NO则不应该将MFMessageComposeViewController展现出来,而应该提示用户当前设备不支持发送短信功能
* 要发送的短信内容和收件人在展示MFMessageComposeViewController之前需要初始化好,展现之后的短信内容不能通过程序来进行修改,不过用户仍然可以手动修改短信内容和选择收件人
* 如果用户点了发送或者取消,或者发送失败时,MFMessageComposeViewController的messageComposeViewController:didFinishWithResult:方法都能得到通知,在这里进行相应的处理
*/
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
if (messageClass != nil) {
// 首先检查当前设备支持短信发送功能
if ([messageClass canSendText]) {
[self displaySMSComposerSheet];
}else{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"当前设备不支持发送短信" message:nil delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles: nil];
[alertView show];
}
}
}
#pragma mark - 发送短信
- (void)displaySMSComposerSheet
{
MFMessageComposeViewController *messagePicker = [[MFMessageComposeViewController alloc] init];
messagePicker.messageComposeDelegate = self; // 设置messagePicker为self,用来监控短信发送状态
NSMutableString *stringUrl = [[NSMutableString alloc] initWithString:@"要发送的内容写在这里,展示以后不能被修改了"]; // 要发送的短信内容和收件人在展示MFMessageComposeViewController之前需要初始化好,展现之后的短信内容不能通过程序来进行修改,不过用户仍然可以手动修改短信内容和选择收件人
messagePicker.body = [NSString stringWithFormat:@"%@",stringUrl];
[self presentViewController:messagePicker animated:YES completion:^{
}];
}
#pragma mark - MFMessageComposeViewControllerDelegate
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
switch (result) {
case MessageComposeResultCancelled:
{
NSLog(@"取消发送信息");
break;
}
case MessageComposeResultSent:
{
NSLog(@"短信发送成功");
break;
}
case MessageComposeResultFailed:
{
NSLog(@"短信发送失败");
break;
}
default:
{
NSLog(@"信息未发送");
break;
}
}
[self dismissViewControllerAnimated:YES completion:^{
}];
}