2011-02-08 16 views
124

Jak programować telefonicznie programowo na telefonie iPhone? Próbowałem poniższy kod, ale nic się nie stało:Programowo programować telefonicznie

NSString *phoneNumber = mymobileNO.titleLabel.text; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 
+2

W przypadku kodu szybkiego można wykonać tę odpowiedź: http://stackoverflow.com/a/29869456/3950397 –

Odpowiedz

179

Prawdopodobnie mymobileNO.titleLabel.text wartość nie zawiera schemat tel: //

Kod powinien wyglądać następująco:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 
+3

Nie ma szans, abyśmy mogli wrócić do oryginalnej aplikacji z tym podejściem. –

+4

Myślę, że podejście Mellon jest lepsze, ponieważ najpierw monituje użytkownika, a następnie wraca do aplikacji po zakończeniu połączenia. Po prostu upewnij się, że używasz canOpenURL: i powracasz do znaku zachęty tel: telprompt nie jest oficjalny i może zostać usunięty w przyszłej wersji iOS. –

+0

Jak wykonać połączenie telefoniczne z Apple Watch. –

214

Aby powrócić do oryginalnej aplikacji, możesz użyć telprompt: // zamiast tel: // - Monit zachęci najpierw użytkownika, ale kiedy połączenie zostanie zakończone, wróci do twojego ap P:

NSString *phoneNumber = [@"telprompt://" stringByAppendingString:mymobileNO.titleLabel.text]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 
+9

Mam pytanie: czy aplikacje, które używają telprompt: // zostaną odrzucone przez Apple? –

+7

Wiem, że to jest stare, ale znalazłem kilka osób, które twierdziły, że ich aplikacje zostały zatwierdzone za pomocą telprompt: "Przesłałem moją aplikację, która używa telprompt ze współużytkowaną aplikacją bez interfejsu uiwebkit i została pomyślnie zatwierdzona przez firmę Apple. odpowiedziało 19 stycznia , 2013 Pablo Alejandro Junge " –

+1

telprompt: // jest nieudokumentowanym i dlatego nigdy nie należy polegać na nim. Rzeczy mogą się zmienić, na przykład Apple może zdecydować, że dany schemat URL jest czymś, czego potrzebują wyłącznie lub po prostu nie chcą na to pozwolić, wtedy twoja aplikacja się zepsuje. – DevC

8

Jeśli używasz Xamarin rozwijać aplikację na iOS, tutaj jest C# równoważne zatelefonować wewnątrz aplikacji:

string phoneNumber = "1231231234"; 
NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", phoneNumber)); 
UIApplication.SharedApplication.OpenUrl(url); 
3

Odpowiednik Java RoboVM:

public void dial(String number) 
{ 
    NSURL url = new NSURL("tel://" + number); 
    UIApplication.getSharedApplication().openURL(url); 
} 
6

Odpowiedzi tutaj są doskonale działające. Właśnie zamieniam odpowiedź Craiga Mellona na Swift. Jeśli ktoś szuka szybkiej odpowiedzi, to im pomoże.

var phoneNumber: String = "telprompt://".stringByAppendingString(titleLabel.text!) // titleLabel.text has the phone number. 
     UIApplication.sharedApplication().openURL(NSURL(string:phoneNumber)!) 
+0

możesz także użyć tel: // w miejscu telprompt: // – Shivaay

+0

niech phoneNumber: String = "telprompt: // \ (titleLabel.text)" UIApplication.shared.openURL (URL (ciąg: phoneNumber)!) – tspentzas

19

Scalanie odpowiedzi na @Cristian Radu i @Craig Mellon, i komentarz z @ joel.d, należy zrobić:

NSString *phoneNumber = mymobileNO.titleLabel.text; 
NSURL *phoneUrl = [NSURL URLWithString:[@"telprompt://" stringByAppendingString:phoneNumber]]; 
NSURL *phoneFallbackUrl = [NSURL URLWithString:[@"tel://" stringByAppendingString:phoneNumber]]; 

if ([UIApplication.sharedApplication canOpenURL:phoneUrl]) { 
    [UIApplication.sharedApplication openURL:phoneUrl]; 
} else if ([UIApplication.sharedApplication canOpenURL:phoneFallbackUrl]) { 
    [UIApplication.sharedApplication openURL:phoneFallbackUrl]; 
} else { 
    // Show an error message: Your device can not do phone calls. 
} 

to najpierw spróbuje użyć „telprompt:// "URL, a jeśli to się nie powiedzie, użyje adresu" tel: // ". Jeśli oboje się nie uda, próbujesz wykonać połączenie telefoniczne na iPadzie lub iPodzie Touch.

+0

Thank ty. Działa dobrze. – Raja

1
let phone = "tel://\("1234567890")"; 
let url:NSURL = NSURL(string:phone)!; 
UIApplication.sharedApplication().openURL(url); 
2

Swift 3

let phoneNumber: String = "tel://3124235234" 
UIApplication.shared.openURL(URL(string: phoneNumber)!) 
2

Próbował opcja Swift 3 powyżej, ale nie zrobił praca. Myślę, że potrzebne są następujące elementy jeśli są do uruchomienia na iOS 10+ na Swift 3:

Swift 3 (iOS 10+):

let phoneNumber = mymobileNO.titleLabel.text  
UIApplication.shared.open(URL(string: phoneNumber)!, options: [:], completionHandler: nil) 
0

w Swift 3.0

static func callToNumber(number:String) { 

     let phoneFallback = "telprompt://\(number)" 
     let fallbackURl = URL(string:phoneFallback)! 

     let phone = "tel://\(number)" 
     let url = URL(string:phone)! 

     let shared = UIApplication.shared 

     if(shared.canOpenURL(fallbackURl)){ 
      shared.openURL(fallbackURl) 
     }else if (shared.canOpenURL(url)){ 
      shared.openURL(url) 
     }else{ 
      print("unable to open url for call") 
     } 

    } 
Powiązane problemy