2012-03-22 12 views
6
//I have created below snippet to let the sensor to be detected. 

-(void)addProximitySensorControl { 

    UIDevice *device = [UIDevice currentDevice]; 
    device.proximityMonitoringEnabled = YES; 

    BOOL state = device.proximityState; 
    if(state) 
     NSLog(@"YES"); 
    else 
     NSLog(@"NO"); 

    [[NSNotificationCenter defaultCenter] addObserver:self 
          selector:@selector(proximityChanged:) 
           name:@"UIDeviceProximityStateDidChangeNotification" 
           object:nil]; 
} 

に動作していません。どんなアイディアな男?近接センサは、iPhone 3GS以前proximityChangedでiPhone 4デバイス

答えて

1

コードに何も問題はありません(もちろん、proximityChanged:を実装したと仮定します)。私はあなたのコードをiPhone 4でテストし、近接センサの前で動いている私の手に反応します。

多分ハードウェアは3GS上で多少異なります。つまり、あなたがやっていることに対してより敏感ですか?別のiPhone 4デバイスで試してみることができますか(または、近接センサーが電話アプリを使用して動作していることを少なくとも確認してください)?

0

はあなたが常に特定のデバイスは、近接センサを持っているかどうかを確認する必要があります。 すべてのiOS端末に近接センサがあるわけではありません。

BOOL state = device.proximityState; 
if(state) 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) 
             name:@"UIDeviceProximityStateDidChangeNotification" object:nil]; 
else 
    NSLog(@"NO"); 
+2

このコードは、デバイスが存在するかどうか( 'isProximityMonitoringEnabled')ではなく、デバイスが何か(' proximityState')に近いかどうかをチェックします。 –

2

このコードにはいくつかの問題があります。最初は、あなたが

name:@"UIDeviceProximityStateDidChangeNotification" 

代わりの

name:UIDeviceProximityStateDidChangeNotification 

どちらの作品を使用していますが、タイプミスをする場合は裸のバージョンを使用すると、あなたのコンパイルエラーを与えるということです。 (タイプミスでコンパイルエラーを起こしたい場合は、サイレントエラーを防ぎます)。

次に、通知を追加する前に近接センサーが使用可能かどうかを実際に確認していないことです。あなたのコード:

BOOL state = device.proximityState 

しかし、これは単にデバイスがユーザーの顔に近いかどうかをチェックします。本当に欲しいのは、proximityEnabledYESに設定し、それが実際に設定されていることを確認することです。それは少し直感的ではありません。

UIDevice *device = [UIDevice currentDevice]; 
[device setProximityMonitoringEnabled:YES]; 
if ([device isProximityMonitoringEnabled]) { 
    // Do your stuff 
} 

ここでは完全なコードサンプルです:

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
UIDevice *device = [UIDevice currentDevice]; 

// Register for proximity notifications 
[device setProximityMonitoringEnabled:YES]; 

if ([device isProximityMonitoringEnabled]) { 
    [notificationCenter addObserver:self 
          selector:@selector(proximityChanged:) 
           name:UIDeviceProximityStateDidChangeNotification 
          object:device]; 
} else { 
    NSLog(@"No Proximity Sensor"); 
} 
2

アップルドキュメント:は「すべてのiOSデバイスは、近接センサを持っていませ近接監視は、それを可能にするための試み利用可能かどうかを判断するための値ならば。 proximityMonitoringEnabledプロパティの値がNOの場合、近接監視は利用できません。

関連する問題