2010-04-06 62 views
2

與接近感應有關的文檔指出,如果在沒有接近感應傳感器(例如iPod touch,iPad)的設備上使用接近感應API,它們就會像接近感應傳感器已經啓動一樣返回。如何檢測iPhone OS設備是否有接近傳感器?

除了檢查[[UIDevice currentDevice] .model]字符串並解析「iPhone」,「iPod touch」或「iPad」是否有一種確定接近傳感器是否位於給定設備上的方式?

回答

2

蘋果的文件指出,「並不是所有的iPhone OS設備有接近傳感器。」要確定您的應用程序正在運行的設備支持近距離監控,設置proximityMonitoringEnabled屬性爲YES,然後檢查其值:

UIDevice *device = [UIDevice currentDevice]; 
device.proximityMonitoringEnabled = YES; 
if (device.proximityMonitoringEnabled == YES) 
    // do something 

來源:http://www.mobileorchard.com/new-in-iphone-30-tutorial-series-part-4-proximity-detection/

+0

的醫生說:如果要判斷接近監測可用,嘗試啓用它。如果{'proximityState'屬性的值保持爲NO,則接近度監控不可用。但是,真的,如果您在傳感器前面沒有任何東西啓用proximityState,我不明白這一點...... – Oliver 2012-01-30 14:45:13

+0

與直接相關,但絕不會與「是」進行比較。只需在布爾上下文中評估它,就像'if(device.proximityMonitoringEnabled)' – ipmcc 2016-02-09 14:23:49

3

從文檔的UIDevice摘自:

proximityMonitoringEnable d

一個布爾值,指示是否啓用 接近監測(是) (NO)。

...

討論

....

並非所有iPhone OS設備有 接近傳感器。要確定 接近監測是否可用, 會嘗試啓用它。如果值 proximityState屬性保持爲 否,則近似監視不是 可用。

克勞斯

0

也許這個片斷可能會有所幫助:

-(BOOL) hasProximitySensor { 

    UIDevice *dev = [UIDevice currentDevice]; 
    BOOL oldValue = [dev isProximityMonitoringEnabled]; 
    [dev setProximityMonitoringEnabled:!oldValue]; 
    BOOL newValue = [dev isProximityMonitoringEnabled]; 

    [dev setProximityMonitoringEnabled:oldValue]; 

    return (oldValue != newValue); 
} 
相關問題