2011-08-14 10 views

答えて

3

このコードは、それを行う必要があります - それはiPhoneが振動機能を備えた唯一のデバイスである「前提とし」注意してください。今のところそれは...

- (NSString *)machine 
{ 
    static NSString *machine = nil; 

    // we keep name around (its like 10 bytes....) forever to stop lots of little mallocs; 
    if(machine == nil) 
    { 
     char * name = nil; 
     size_t size; 

     // Set 'oldp' parameter to NULL to get the size of the data 
     // returned so we can allocate appropriate amount of space 
     sysctlbyname("hw.machine", NULL, &size, NULL, 0); 

     // Allocate the space to store name 
     name = malloc(size); 

     // Get the platform name 
     sysctlbyname("hw.machine", name, &size, NULL, 0); 

     // Place name into a string 
     machine = [[NSString stringWithUTF8String:name] retain]; 
     // Done with this 
     free(name); 
    } 

    return machine; 
} 

-(BOOL)hasVibration 
{ 
    NSString * machine = [self machine]; 

    if([[machine uppercaseString] rangeOfString:@"IPHONE"].location != NSNotFound) 
    { 
     return YES; 
    } 

    return NO; 
} 

マシンコールが呼び出されるたびにたくさんの小さなmallocをやってしまうのを止めるために編集しました。

+0

これは、二つの質問素晴らしいですけれども、私は本当にあなたが使用するC関数を理解していない - 「(名)自由が」「名」の最後の時間の後に呼び出されることはありません、それが使用されていますか?もう1つ、文字列ではなく、 'hasVibration'の 'BOOL'結果をより簡単にキャッシュできますか?もっと直接的だと思われる。 –

+0

うん - 私の悪い:( - - 無料に気付いてくれてありがとう、その使用ポイントの後だったまた、あなたがする必要がある場合に生じるキャッシュする必要があり、私が貼り付けられた機能は、ハードウェアのすべての種類を返します。私が持っているより大きなクラスの一部でした –

+0

ああ、完璧な私はそれに応じて調整します。 –

5

私はおそらく偉大なアプローチではありませんモデルチェックを行うよりも、この他を行う方法があるかわかりません。私はリンゴが提供することを知っています:

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

デバイスが振動することができます。振動のないデバイスでは、何もしません。それは能力のハッシュまたはデバイスがビープ音が鳴りますと、この1は、デバイスを振動します

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 

:別のコールがあります。

彼らは振動装置を持っていないときに、ユーザーがビープ音を望む可能性があるため、それだけで設定があり、設定の周りにいくつかの説明を持っている方がよいかもしれません。 「振動警報のオン/オフ」以外の設定を呼び出すことがあります。

関連する問題