Исключить Ipod Touch из функции телефона Приложение для iPhone - PullRequest
2 голосов
/ 18 сентября 2009

Как я могу исключить функцию звонка и смс из Ipod Touch, но при этом сохранить ее функциональность на iPhone. У iPod Touch, конечно, нет телефона, и смс можно получить через дополнительное приложение. Техническая поддержка любезно предложила мне взглянуть на системный вызов «sysctlbyname» и раздел «CTL_HW» от Apple, предоставив справочную документацию по iPhoneOS. http://developer.apple.com/iphone/library/documentation/System/Conceptual/ManPages_iPhoneOS/man3/sysctlbyname.3.html

Они сказали, что необходимо проверить класс машины и тип машины, чтобы определить, способно ли устройство поддерживать телефонные звонки. Ну, я посмотрел на это, и это греческое для меня. С другой стороны можно этот фрагмент с вашего форума:

[Bind(Exclude="ID, Name")]

использоваться, чтобы исключить оценку для моей книги контактов в приложении на iPod Touch? Если это так, я полагаю, что он будет вставлен в файл RetrieveContactInfoViewController.m, но в каком разделе. (конечно, есть и файлы RetrieveContactInfoViewAppDelegate). Как я могу исключить функции телефона из iPod Touch?

Ответы [ 2 ]

4 голосов
/ 18 сентября 2009

Гораздо проще и безопаснее проверить эти возможности на iPhone OS 3.0, если выяснить, поддерживается ли реальная функция, а не на каком вы устройстве. Это легко сделать, так как и вызов, и отправка текста являются зарегистрированными схемами URL, поэтому просто спросите, можно ли открыть URL для вызова или отправки текста.

-(BOOL)canSendTextMessage;
{
  UIApplication* app = [UIApplication sharedApplication];
  return [app canOpenURL:[NSURL URLWithString:@"sms:12345"]];
}

-(BOOL)canMakePhoneCall;
{
  UIApplication* app = [UIApplication sharedApplication];
  return [app canOpenURL:[NSURL URLWithString:@"tel:12345"]];
}
1 голос
/ 18 сентября 2009

Если я правильно понимаю ваш вопрос, вы хотите ограничить возможности своего приложения в зависимости от того, работает ли приложение на iPod touch или iPhone? Если это так ... (если нет, вам нужно перефразировать ваш вопрос)

Проверьте эту страницу в документации .

Он предназначен для класса UIDevice, который позволяет получить доступ к базовой информации об устройстве, на котором запущено приложение. Метод, связанный с вышеупомянутым, является свойством «модели» UIDevice. Это может быть очень полезно. Например:

if ([[[UIDevice currentDevice] model] rangeOfString:@"iPhone"].location != NSNotFound) {
  NSLog(@"I am running on an iPhone (or in the simulator)");
} else {
  NSLog(@"I am running on an iPod touch");
}

Использовать это в большом количестве мест может быть утомительно. Вот где было бы полезно создать категорию на UIDevice, например:

//UIDevice+ModelInfo.h
@interface UIDevice (ModelInfo)
- (BOOL) isiPhone;
@end

//UIDevice+ModelInfo.m
@implementation UIDevice (ModelInfo)

- (BOOL) isiPhone {
  static BOOL isiPhone;
  static BOOL modelTypeInitialized;
  if (modelTypeInitialized == NO) {
    modelTypeInitialized = YES;
    isiPhone = ([[self model] rangeOfString:@"iPhone"] != NSNotFound);
  }
  return isiPhone;
}

@end

Это даже кеширует результат для вас, поэтому сравнение строк выполняется только один раз. Теперь вы можете сделать:

#import "UIDevice+ModelInfo.h"
if ([[UIDevice currentDevice] isiPhone]) {
  NSLog(@"Do something iPhoney");
} else {
  NSLog(@"I cannot do iPhoney things");
}

Счастливого Рождества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...