كيفية معرفة ما إذا كان جهاز Cocoa Touch يمكن إجراء مكالمات؟ [مكرر
-
05-09-2019 - |
سؤال
ممكن مكررة:
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] ] ];
}