iOS電話

4199 ワード

シミュレータは電話のかけ方が実行されず、電話をかけるには本物でなければならない.次の方法はiOS 8以降のシステムでテストします.Demoダウンロード

方法一、requestWithURL(推奨使用)


特性:iOS 8:弾枠提示、クリックOK、ダイヤルアップ(iOS 8.3下テスト)iOS 11:弾枠提示、クリックOK、ダイヤルアップ(iOS 11.3.1下テスト)iOS 12:弾枠提示、クリックOK、ダイヤルアップ(iOS 12.0下テスト)iOS 13:弾枠提示、クリックコール、ダイヤルアップ(iOS 13.0下テスト)
OCコード:
NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"10086"];
UIWebView * callWebview = [[UIWebView alloc] init];
[callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
[self.view addSubview:callWebview];

Swiftコード:
let callWebview =   UIWebView()
callWebview.loadRequest(NSURLRequest(url: URL(string: "tel:10086")!) as URLRequest)
self.view.addSubview(callWebview)

方法二、openURL(telprompt)


特性:iOS 8:弾枠提示、クリックOK、ダイヤルアップ(iOS 8.3下テスト)iOS 11:弾枠提示、クリックOK、ダイヤルアップ(iOS 11.3.1下テスト)iOS 12:弾枠提示、クリックOK、ダイヤルアップ(iOS 12.0下テスト)iOS 13:弾枠提示、クリックコール、ダイヤルアップ(iOS 13.0下テスト)
ネット上では、この方法は合法的ではない可能性があり、審査を通過できないという.
OCコード:
NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"telprompt:%@",@"10086"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

Swiftコード:
UIApplication.shared.openURL(URL(string: "telprompt:10086")!)

方法3 openURL(tel)を利用する


特性:iOS 8:弾けないヒント、直接電話(iOS 8.3下テスト)iOS 11:弾けないヒント、クリックOK、電話(iOS 11.3.1下テスト)iOS 12:弾けないヒント、クリックOK、電話(iOS 12.0下テスト)iOS 13:弾けないヒント、クリックコール、電話(iOS 13.0下テスト)
OCコード:
NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"10086"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

Swiftコード:
UIApplication.shared.openURL(URL(string: "tel:10086")!)

Xcode 8開発ツールの下で- (BOOL)openURL:(NSURL*)urlを使用すると以下の警告があります!
Please use openURL:options:completionHandler: instead iOS10 API

変更:
- (BOOL)openURL:(NSURL*)url;// 

iOS 10以降は、下のAPIに置き換えることを推奨
- (void)openURL:(NSURL*)url options:(NSDictionary *)options completionHandler:(void (^ __nullable)(BOOL success))completion;

コメント:
  • はiOS 10の後にopenURL:の方法で電話をかけると1-2秒の遅延時間があり、iOS 10の後にopenURL: options: completionHandler:のAPIを使用して遅延問題を解決することができる.
  • このopenURL: options: completionHandler:メソッドAPIはiOS 11でテストされた場合、ダイヤルする前にプロンプトがポップアップされ、and、ダイヤルした後に元のアプリケーションに戻ります.

  • 例:
    OCコード:
        NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@",@"10086"];
        CGFloat version = [[[UIDevice currentDevice]systemVersion]floatValue];
          if (version >= 10.0) {
                    ///  10.0 openURL 
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
           } else {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
           }
    

    OCコードでは、システムメソッドを判断して下の文(実はXcode 9自動プロンプト追加)に置き換えることができ、これでは、自分でシステムバージョン番号を取るのではなく、システムメソッド@available(iOS 10.0, *)を使って、コードは以下の通りです.
    NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", @"10086"];
      if (@available(iOS 10.0, *)) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
       } else {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
       }
    

    Swift 3コード:
        let  tel = "10086"
        if #available(iOS 10.0, *) {
                UIApplication.shared.open(URL(string: "tel:" + tel!)!, options: [:], completionHandler: nil)
            } else {
                
                 UIApplication.shared.openURL(URL(string: "tel:" + tel!)!)
            }
    

    もしあなたが本文があなたに役に立つと思ったら、下の点で好きになって、私にこの文章が果たすべき役割を果たしたことを知らせてください.ありがとう!
    ダウンロード:CallPhoneDemo
    参考投稿:http://www.th7.cn/Program/IOS/201406/216863.shtml http://www.cocoachina.com/bbs/read.php?tid=177141