web-dev-qa-db-ja.com

iPhone近接センサー

IPhone SDKはiPhoneの近接センサーを利用できますか?もしそうなら、なぜ誰もそれらを利用していないのですか?私はいくつかのまともな用途を想像することができました。

たとえば、レーシングゲームでは、親指で画面を占有する代わりに、近接センサーに指を置いて移動することができます。もちろん、これが唯一の選択肢である場合、iPod touchユーザーはアプリケーションを使用できません。

近接センサーは、あなたがどれだけ近いか、または何かがその前にあることを伝えますか?

20
Greg

耳に当てたときに画面を遮断するセンサーを意味しているとすれば、それは耳のスピーカー内部の赤外線センサーにすぎないと確信しています。電話アプリを起動し(電話をかける必要はありません)、何かを押し続けてイヤースピーカーに影を落とすと、ディスプレイをオフにすることができます。

この質問をしたとき、パブリックAPIを介してアクセスできませんでした。これで、UIDeviceのproximityStateプロパティを介してセンサーの状態にアクセスできます。ただし、これはオン/オフの機能にすぎず、ニア/ファールメジャーではないため、ゲームにはそれほど役立ちません。さらに、iPhoneでのみ利用でき、iPod touchでは利用できません。

17
benzado

isこのためのパブリックAPIがあります。 -[UIApplication setProximitySensingEnabled:(BOOL)]は機能をオンにします。ところで、近接センサーは暗い部屋で微調整するため、光センサーを使用していないようです。

ただし、スマートフォンを顔に近づけると、API呼び出しは基本的に画面をブランクにします。残念ながら、相互作用には役立ちません。

32
Brendan Berg

ステータスバーが横向きの場合、近接センサーはオンになりません。つまり、あなたが電話した場合:

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

proximity:ON通知を受け取りません。

これは間違いなくOS 3.0で発生します。近接センサーを備えたデバイスがないため、2.Xデバイスではテストできません。

これはバグのようです。

8
Kevin Lambert

近接センサーと環境光センサーの間には多くの混乱があります。 iPhoneには両方あります。タッチには近接センサーがないため、ユーザー入力には適していません。 Appleは将来のデバイスで同じ場所に配置する義務がないため、どこにあるかを知ったり、気にする必要はないので、とにかく悪い考えです。

近接センサーは、赤外線LEDにパルスを送り、反射量を測定することによって機能します。 iSightカメラを使用してこれを確認できます(ほとんどのデジタルカメラはIRに敏感です)。PhotoBoothを起動し、電話で通話を開始(またはボイスメールを再生)して、iSightカメラに向けます。イヤホンの横にある点滅するライトに注意してください。指で覆うと画面が黒くなります。

この時点では、環境光センサーのAPIは明らかにプライベートです。

5
David Gish

更新するだけで、これは可能です。

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];

ベンザドが指摘するように、あなたは使うことができます:

// Returns a BOOL, YES if device is proximate
[device proximityState];
5
Ben Flynn

近接センサーは、IR反射率を測定することで機能します。 iPhoneをウェブカメラに近づけると、小さなパルス状のIR LEDが表示されます。

5
Hang

AppStoreを目指していない場合は、これらへのアクセスに関する私の記事をここで読むことができます。

近接センサー: http://iphonedevwiki.net/index.php/AppleProxShim

環境光センサー: http://iphonedevwiki.net/index.php/AppleISL290

2
Elias Limneos

ステータスバーが横向きの場合、近接センサーがオンになることはありません。つまり、[UIApplication sharedApplication] .statusBarOrientation = UIInterfaceOrientationLandscapeLeft;を呼び出すと、プロキシミティ:ON通知が表示されなくなります。これはOSで発生します。 3.0、2.Xデバイスでは近接センサーを搭載していないため、テストできません。これはバグのようです。09年7月22日5:49に回答Kevin Lambert


私もこの問題を指摘しました。近接センサーが機能しない本当の理由を理解するのに長い時間がかかりました。方向がUIInterfaceOrientationLandscapeLeftまたはUIInterfaceOrientationLandscapeRightの場合、近接センサーは機能しません。ポートレートモードのときはうまくいきます。私のiPhoneはiPhone 4S(iOS SDK 5.0)です。

2
wave_1102

IPhone 3.0では、近接センサーの公式サポートがあります。見て UIDevice proximityMonitoringEnabledドキュメント内。

2
Brian

このためのパブリックAPIはありません。

2
Chris Lundie

これらの近接センサーは、基本的に導体のマトリックスです。垂直の「ワイヤー」は絶縁体の薄いシートの片側のトラックで、水平のワイヤーは反対側にあります。交点はコンデンサとして機能します。指は静電気を帯びているため、各接点の静電容量は近接性によって異なります。 FETは信号を増幅し、バイアスはしきい値を設定します。 relativeの変化を検出してノイズを除去する必要があるため、実際には回路はそれよりも複雑です。

しかし、とにかく、センサーグリッドが示すのは、電界効果が感知されたことと、その電界効果は、指先のサイズとディスプレイの表面上にあるオブジェクトの特性です。容量性外乱の重心は(おそらくハードウェアによって)計算され、座標は(おそらく)割り込みによってデバイスOSの注意を引く可能性が高いポート上の数値として報告されます。 iPhoneのようなセクシーなものには、おそらく最後の数十位のバッファーがあり、方向性と速度を計算できます。おそらくこれらもハードウェアによって計算され、同じポートの数値として表示されます。

1
Peter Wone

画面をオフにするには、画面をオフにする必要があるかどうかを判断するために複数のセンサーを使用することが考えられます。 Cryptognomeによって記述されたIR近接センサーとPeter Woneによって記述されたタッチスクリーンセンサーは、iPhoneがあなたの顔(またはわずかな電荷を持つ何か)の近くに保持されている場合、またはその中に非常に近い場合に機能する可能性があります。 -アニメーション。

0
user183578

@Dipak Patelと@Coderer

動作しているコードは http://spazout.com/google_cheats_independent_iphone_developers_screwed からダウンロードできます。

これには、UIApplicationのドキュメント化されていないメソッド、proximityStateChangedの実装が機能しています。

お役に立てれば。

0
chews