كيفية معرفة ما إذا كان جهاز Cocoa Touch يمكن إجراء مكالمات؟ [مكرر

StackOverflow https://stackoverflow.com/questions/903961

سؤال

ممكن مكررة:
iOS - كشف ما إذا كان جهاز دعم الجهاز أم لا؟

أنا أكتب تطبيقا iPhone يوفر زر لاستدعاء رقم هاتف. أنا أستخدم رمز مثل ما يلي لطلب الرقم باستخدام tel: عنوان URL بالطريقة المعتادة:

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

إنه يعمل بشكل جيد على iPhone الحقيقي، لكنني أحصل على تنبيه "URL غير مدعوم" في المحاكاة. من المفترض أن يحدث ذلك أيضا على اتصال iPod، على الرغم من أنني لم أختبر ذلك. سيكون من الجيد إزالة الزر عند تشغيل الجهاز الذي لن يقوم بإجراء مكالمات.

هل هناك طريقة للكشف عن ما إذا كان يمكن لجهاز Touch Cocoa إجراء مكالمات هاتفية؟

هل كانت مفيدة؟

المحلول

يمكنك الاستعلام [[UIDevice currentDevice] model], وتحقق مما إذا كان iPhone.

نصائح أخرى

من نوح يذرسبون في قم بإجراء مكالمة من تطبيق iPhone الخاص بي

لا يدعم المحاكاة الكثير من مخططات URL ل IOS، بما في ذلك تلك الخاصة بالهاتف والخرائط و YouTube و Apps SMS. هذا هو أيضا حالة للأجهزة مثل iPod Touch و iPad، والتي لا تملك قدرات الهاتف؛ قبل استخدام أي مخطط URL عبر -OPENURL:، يجب عليك التحقق من أجل الدعم لهذا المخطط باستخدام -canopenURL:، والتي سترجع نعم أو لا يوجد اعتماد على ما إذا كان الجهاز الحالي يدعم نظام URL الذي تستخدمه

لذلك الاستعلام [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]لمعرفة ما إذا كان الجهاز يمكن إجراء مكالمات.

من 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

فيما يلي مقتطف رمز بسيط يمكنني التحقق من طراز الجهاز هو هاتف وليس محاكي للتأكد من أنه يمكن إجراء مكالمات.

if ([[[UIDevice currentDevice] model] rangeOfString:@"Phone"].location != NSNotFound &&
    [[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location == NSNotFound ) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", number]  ] ];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top