iPhone SDK は iPhone の近接センサーを利用できますか? もしそうなら、なぜ誰もそれらを利用しなかったのですか?私はいくつかのまともな使用法を想像することができました.
たとえば、レーシング ゲームでは、親指で画面領域を占有する代わりに、近接センサーに指を置くことができます。もちろん、これが唯一のオプションである場合、iPod touch ユーザーはアプリケーションを使用できません。
近接センサーは、あなたがどれだけ近づいているか、または何かがその前にあることを知らせますか?
これにはパブリック API があります。-[UIApplication setProximitySensingEnabled:(BOOL)] は機能をオンにします。ところで、暗い部屋では近接センシングが微調整されるため、光センサーを使用していないようです。
ただし、電話を顔にかざすと、API 呼び出しは基本的に画面を空白にします。悲しいことに、相互作用には役に立ちません。
画面を耳に当てたときに画面をオフにするセンサーを意味すると仮定すると、それはイヤースピーカー内の単なる赤外線センサーであると確信しています. 電話アプリを起動し (電話をかけている必要はありません)、何かを持ってイヤースピーカーに影を落とすと、ディスプレイをオフにすることができます。
この質問をしたとき、公開 API 経由ではアクセスできませんでした。proximityStateUIDevice のプロパティを介してセンサーの状態にアクセスできるようになりました。ただし、これはオン/オフのみであり、近距離/遠距離の尺度ではないため、ゲームにはそれほど役に立ちません。さらに、これは iPhone でのみ利用でき、iPod touch では利用できません。
ステータスバーが横向きの場合、近接センサーがオンにならないことは明らかです。つまり、次のように呼び出した場合:
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
近接:ON通知を受信しなくなります。
これは間違いなく OS 3.0 で発生します。近接センサーを備えたデバイスを持っていないため、2.X デバイスではテストできません。
これはバグのようです。
更新するだけで、これは可能です。
device = [UIDevice currentDevice];
// Turn on proximity monitoring
[device setProximityMonitoringEnabled:YES];
// To determine if proximity monitoring is available, attempt to enable it.
// If the value of the proximityMonitoringEnabled property remains NO, proximity
// monitoring is not available.
// Detect whether device supports proximity monitoring
proxySupported = [device isProximityMonitoringEnabled];
// Register for proximity notifications
[notificationCenter addObserver:self selector:@selector(proximityChanged:) name:UIDeviceProximityStateDidChangeNotification object:device];
benzado が指摘しているように、以下を使用できます。
// Returns a BOOL, YES if device is proximate
[device proximityState];
近接センサーは、IR 反射率を測定することによって機能します。iPhone をウェブカメラにかざすと、小さなパルス IR LED が見えます。
近接センサーと環境光センサーの間には多くの混乱があります。iPhoneには両方があります。Touch には近接センサーがないため、ユーザー入力には適していません。いずれにせよ、Apple は将来のデバイスで同じ場所に配置する義務がないため、それは悪い考えです。それがどこにあるかを知ったり気にしたりする必要はありません。
近接センサーは、赤外線 LED をパルスし、反射量を測定することによって機能します。これは、iSight カメラを使用して確認できます (ほとんどのデジタル カメラは IR に敏感です)。Photo Booth を起動し、電話で通話を開始 (またはボイスメールを再生) して、iSight カメラにカメラを向けるだけです。イヤホンの横のライトが点滅していることに注意してください。指で覆うと画面が真っ暗になります。
環境光センサーの API は、この時点では明らかに非公開です。
iPhone 3.0 では、近接センサーが公式にサポートされています。UIDevice proximityMonitoringEnableddocsを参照してください。
このためのパブリック API はありません。
ステータスバーが横向きの場合、近接センサーがオンにならないことは明らかです。つまり、次のように呼び出した場合: [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft; 近接:ON 通知を受信しなくなります。これは間違いなく OS 3.0 で発生します。近接センサーを備えたデバイスを持っていないため、2.X デバイスではテストできません。これはバグのようです。回答 22 7月 2009 〜で 05:49 ケビン ランバート
私もこの問題に遭遇しました。近接センサーが機能しない本当の理由を理解するのに長い時間がかかりました。方向が UIInterfaceOrientationLandscapeLeft または UIInterfaceOrientationLandscapeRight の場合、近接センサーは機能しません。ポートレートモードではうまく機能します。私のiPhoneはiPhone 4S (iOS SDK 5.0)です。
AppStore を目指していない場合は、それらへのアクセスに関する私の記事をここで読むことができます。
これらの近接センサーは、基本的に導体のマトリックスです。垂直方向の「ワイヤ」は絶縁体の薄いシートの片側にあるトラックで、水平方向のものは反対側にあります。交点はコンデンサとして機能します。指には静電気が帯電しているため、各ジャンクションの静電容量は近接によって変化します。FET が信号を増幅し、バイアスがしきい値を設定します。実際には、相対的な変化を検出してノイズを除去する必要があるため、回路はそれよりも複雑になります。
とにかく、センサー グリッドが伝えているのは、電界効果が感知されたことです。その電界効果は、指先ほどの大きさでディスプレイの表面に置かれている物体の特徴です。容量性障害の重心は (おそらくハードウェアによって) 計算され、座標は (おそらく) 割り込みによってデバイス OS の注意を引く可能性が最も高いポートの数値として報告されます。iPhone のようなセクシーなものでは、方向と速度を計算できるように、最後の 12 かそこらの位置のバッファが存在する可能性があります。おそらく、これらもハードウェアによって計算され、同じポートに数値として表示されます。
画面をオフにするために、複数のセンサーを使用して、画面をオフにする必要があるかどうかを判断することが考えられます。Cryptognome によって説明されている IR 近接センサーは、Peter Wone によって説明されているタッチ スクリーン センサーと組み合わせて使用できます。 -アニメーション化します。
@Dipak Patel & @Coderer
http://spazout.com/google_cheats_independent_iphone_developers_screwedで作業コードをダウンロードできます。
UIApplication の文書化されていないメソッドである、proximityStateChanged の有効な実装があります。
お役に立てれば。