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では、オブジェクトを上からホバリングしているときにセンサー(画面)が検出されません。アイデアはありますか?

4

5 に答える 5

2

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

 name:@"UIDeviceProximityStateDidChangeNotification"

それ以外の

name:UIDeviceProximityStateDidChangeNotification

どちらも機能しますが、タイプミスをすると、ベアバージョンを使用するとコンパイラエラーが発生します。(タイプミスでコンパイラエラーが発生したい場合は、サイレントエラーを防ぎます)。

次のことは、通知を追加する前に、実際に利用可能な近接センサーをチェックしていないということです。あなたのコード:

BOOL state = device.proximityState

しかし、これはデバイスがユーザーの顔に近いかどうかをチェックするだけです。本当に必要なのは、に設定proximityEnabledしてからYES、実際に設定されていることを確認することです。少し直感に反します。

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");
}
于 2013-03-01T12:57:28.593 に答える
2

Apple Docs:「すべてのiOSデバイスに近接センサーがあるわけではありません。近接監視が利用可能かどうかを判断するには、それを有効にしてみてください。proximityMonitoringEnabledプロパティの値がNOのままの場合、近接監視は利用できません。」

于 2013-08-13T13:58:13.380 に答える
1

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

たぶん、ハードウェアは3GSでわずかに異なります。つまり、実行していることに敏感ですか?別のiPhone4デバイスで試してみることができますか(または、少なくとも電話アプリを使用して、近接センサーがまったく機能することを確認してください)?

于 2012-03-26T05:32:17.320 に答える
1

これをチェックしてください:

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html

于 2012-03-29T13:54:20.453 に答える
0

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

BOOL state = device.proximityState;
if(state)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) 
                                         name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
else
    NSLog(@"NO");
于 2012-03-30T16:47:34.020 に答える