2009-05-24 18 views
7

संभव डुप्लिकेट:
iOS - Detecting whether or not device support phone calls?कैसे बताएं कि कोको टच डिवाइस कॉल कर सकता है या नहीं?

मुझे लगता है कि एक फोन नंबर पर कॉल करने के लिए एक बटन प्रदान करता है एक iPhone आवेदन लिख रहा हूँ। मैं निम्नलिखित की तरह कोड का उपयोग कर रहा हमेशा की तरह एक tel: URL का उपयोग नंबर डायल करने के:

NSURL* contactTelURL = [NSURL 
         URLWithString:[NSString 
             stringWithFormat:@"tel:%@", 
             contactTel]]; 
[[UIApplication sharedApplication] openURL:contactTelURL]; 

यह एक वास्तविक iPhone पर ठीक काम करता है, लेकिन मैं सिर्फ सिम्युलेटर में एक 'असमर्थित URL' अलर्ट मिलता है। संभवतः यह एक आइपॉड टच पर भी होगा, हालांकि मैंने इसका परीक्षण नहीं किया है। किसी डिवाइस पर चलने पर बटन को हटाना अच्छा होगा जो कॉल नहीं करेगा।

प्रोग्रामेटिक रूप से पता लगाने का कोई तरीका है कि कोको टच डिवाइस फोन कॉल कर सकता है या नहीं?

उत्तर

-1

आप [[UIDevice currentDevice] model] से पूछ सकते हैं, और जांचें कि यह एक आईफोन है या नहीं।

+5

यह पसंदीदा समाधान नहीं है। आपको एक विशिष्ट मॉडल के परीक्षण के बजाए डिवाइस की कौन सी क्षमताओं की जांच करनी चाहिए, इसकी जांच करनी चाहिए। Neilkimmett का जवाब देखें। –

+0

यह गलत जवाब है, यह प्रश्न एक डुप्लिकेट है, और सही उत्तर यहां प्रदान किया गया है: http://stackoverflow.com/questions/5094928/ios-detecting-whether-or-not-device-support-phone-calls –

+0

यह आपको नहीं बताता है कि डिवाइस कॉल कर सकता है (यानी इसमें सिम है, नेटवर्क पर है, आदि) – ToddB

7

iphonedevelopment.blogspot.com

#import <sys/utsname.h> 

enum { 
    MODEL_IPHONE_SIMULATOR, 
    MODEL_IPOD_TOUCH, 
    MODEL_IPHONE, 
    MODEL_IPHONE_3G 
}; 

@interface DeviceDetection : NSObject 

+ (uint) detectDevice; 
+ (NSString *) returnDeviceName:(BOOL)ignoreSimulator; 

@end 


@implementation DeviceDetection 

+ (uint) detectDevice { 
    NSString *model= [[UIDevice currentDevice] model]; 

    // Some iPod Touch return "iPod Touch", others just "iPod" 

    NSString *iPodTouch = @"iPod Touch"; 
    NSString *iPodTouchLowerCase = @"iPod touch"; 
    NSString *iPodTouchShort = @"iPod"; 

    NSString *iPhoneSimulator = @"iPhone Simulator"; 

    uint detected; 

    if ([model compare:iPhoneSimulator] == NSOrderedSame) { 
     // iPhone simulator 
     detected = MODEL_IPHONE_SIMULATOR; 
    } else if ([model compare:iPodTouch] == NSOrderedSame) { 
     // iPod Touch 
     detected = MODEL_IPOD_TOUCH; 
    } else if ([model compare:iPodTouchLowerCase] == NSOrderedSame) { 
     // iPod Touch 
     detected = MODEL_IPOD_TOUCH; 
    } else if ([model compare:iPodTouchShort] == NSOrderedSame) { 
     // iPod Touch 
     detected = MODEL_IPOD_TOUCH; 
    } else { 
     // Could be an iPhone V1 or iPhone 3G (model should be "iPhone") 
     struct utsname u; 

     // u.machine could be "i386" for the simulator, "iPod1,1" on iPod Touch, "iPhone1,1" on iPhone V1 & "iPhone1,2" on iPhone3G 

     uname(&u); 

     if (!strcmp(u.machine, "iPhone1,1")) { 
      detected = MODEL_IPHONE; 
     } else { 
      detected = MODEL_IPHONE_3G; 
     } 
    } 
    return detected; 
} 


+ (NSString *) returnDeviceName:(BOOL)ignoreSimulator { 
    NSString *returnValue = @"Unknown"; 

    switch ([DeviceDetection detectDevice]) { 
     case MODEL_IPHONE_SIMULATOR: 
      if (ignoreSimulator) { 
       returnValue = @"iPhone 3G"; 
      } else { 
       returnValue = @"iPhone Simulator"; 
      } 
      break; 
     case MODEL_IPOD_TOUCH: 
      returnValue = @"iPod Touch"; 
      break; 
     case MODEL_IPHONE: 
      returnValue = @"iPhone"; 
      break; 
     case MODEL_IPHONE_3G: 
      returnValue = @"iPhone 3G"; 
      break; 
     default: 
      break; 
    }   
    return returnValue; 
} 

@end 
40

नूह विदरस्पून से से Make a call from my iPhone application

पर सिम्युलेटर आईओएस के URL योजनाओं का एक बहुत समर्थन नहीं करता, फोन, मैप्स, यूट्यूब, और एसएमएस क्षुधा के लिए उन सहित । यह आईपॉड टच और आईपैड जैसे उपकरणों के मामले में भी है, जिनके पास फोन क्षमता नहीं है; -openURL माध्यम से किसी भी यूआरएल स्कीम उपयोग करने से पहले :, आप :, -canOpenURL का उपयोग कर जो यस वापस आ जाएगी कि इस योजना के लिए समर्थन के लिए जाँच करनी चाहिए या नहीं पर वर्तमान डिवाइस यूआरएल स्कीम आप

तो उपयोग कर रहे हैं समर्थन करता है या निर्भर करता है क्वेरी [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]] यह पता लगाने के लिए कि डिवाइस कॉल कर सकता है या नहीं।

+1

यह मेरे लिए सही जवाब है। इसे हमेशा कॉल करना चाहिए - [UIAplplication canOpenURL] कॉल करने से पहले - [UIAplplication openURL] –

+0

यह मेरे आईपैड 2 पर आईओएस 8.1 चल रहा है। 8.1 सिम्युलेटर पर, हालांकि, यह गलत लौट रहा है। तो यह वास्तविक डिवाइस पर काम नहीं करता है। – Alex

+0

शायद आईओएस 8 में जोड़े गए निरंतरता सुविधा के साथ कुछ करने के लिए कुछ है? – Scott

0

यहां एक साधारण कोड स्निपेट है जिसका उपयोग मैं डिवाइस मॉडल की जांच करने के लिए करता हूं, यह एक फोन है और यह सुनिश्चित करने के लिए सिम्युलेटर नहीं है कि यह कॉल कर सके।

if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound && 
    [[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound) { 
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number] ] ]; 
} 
संबंधित मुद्दे