web-dev-qa-db-fra.com

capteur de proximité iPhone

Le SDK pour iPhone peut-il tirer parti des capteurs de proximité de l'iPhone? Si oui, pourquoi personne n’en a-t-il profité? Je pourrais imaginer quelques utilisations décentes.

Par exemple, dans un jeu de course, vous pouvez placer votre doigt sur le capteur de proximité au lieu de passer à l'écran avec votre pouce. Bien entendu, si cette option était votre seule option, les utilisateurs d'iPod touch ne pourraient pas utiliser l'application.

Le capteur de proximité indique-t-il à quelle distance vous vous trouvez ou juste que quelque chose se trouve devant?

20
Greg

En supposant que vous parliez du capteur qui ferme l'écran lorsque vous le tenez à l'oreille, je suis presque sûr qu'il ne s'agit que d'un capteur infrarouge à l'intérieur du haut-parleur. Si vous démarrez l'application téléphonique (vous n'êtes pas obligé de passer un appel) et tenez quelque chose pour projeter une ombre sur le haut-parleur auriculaire, vous pouvez éteindre l'écran.

Lorsque vous avez posé cette question, elle n'était pas accessible via l'API publique. Vous pouvez maintenant accéder à l'état du capteur via la propriété proximityState de UIDevice. Cependant, cela ne serait pas très utile pour les jeux, car il s’agit uniquement d’une action on/off, et non d’une mesure proche/lointaine. De plus, il n'est disponible que sur l'iPhone et non sur l'iPod touch.

17
benzado

Il est une API publique pour cela. - [UIApplication setProximitySensingEnabled: (BOOL)] active la fonction. BTW, il semble ne pas utiliser le capteur de lumière, parce que la détection de proximité serait Tweak out dans une pièce sombre.

Toutefois, l’appel de l’API vide l’écran lorsque vous tenez le téléphone en face de vous. Pas utile pour l'interaction, malheureusement.

32
Brendan Berg

Evidemment, le capteur de proximité ne s’allumera jamais si la barre d’état est orientée paysage. Par exemple, si vous appelez:

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

Vous n'obtiendrez plus les notifications proximite: ON .

Cela se produit vraiment sur OS 3.0, je ne peux pas le tester sur un appareil 2.X car je n'en ai pas avec un capteur de proximité.

Cela ressemble à un bug.

7
Kevin Lambert

Il y a beaucoup de confusion entre le capteur de proximité et le capteur de lumière ambiante. L'iPhone a les deux. Le Touch n'a pas de capteur de proximité, ce qui en fait un mauvais choix pour la saisie de l'utilisateur. De toute façon, ce serait une mauvaise idée puisque Apple n’est pas obligé de le localiser au même endroit dans les futurs appareils; vous n'êtes pas censé savoir ou se soucier de sa localisation.

Le capteur de proximité fonctionne en émettant une DEL infrarouge et en mesurant la quantité de réflectance. Vous pouvez le voir en utilisant votre caméra iSight (la plupart des appareils photo numériques sont sensibles aux infrarouges.) Il suffit de lancer Photo Booth, passer un appel (ou de diffuser une messagerie vocale) sur le téléphone et de le pointer vers votre caméra iSight. Notez le clignotant à côté de l’écouteur; couvrez-le avec votre doigt et l'écran deviendra noir.

L'API du capteur de lumière ambiante est évidemment privé à ce stade.

5
David Gish

Juste pour mettre à jour, c'est possible.

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

Comme le fait remarquer benzado, vous pouvez utiliser:

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

Le capteur de proximité fonctionne via la mesure de la réflectance IR. Si vous tenez votre iPhone devant une webcam, vous pouvez voir une petite LED infrarouge clignotante. 

5
Hang

Si vous ne visez pas l'AppStore, vous pouvez lire mes articles ici sur l'accès à ceux-ci: 

Capteur de proximité: http://iphonedevwiki.net/index.php/AppleProxShim

Capteur de lumière ambiante: http://iphonedevwiki.net/index.php/AppleISL29003

2
Elias Limneos

Évidemment, le capteur de proximité ne s’allumera jamais si la barre d’état est en orientation paysage. I.e. si vous appelez: [UIApplication sharedApplication] .statusBarOrientation = UIInterfaceOrientationLandscapeLeft; Vous n'obtiendrez plus les notifications de proximité: ON. Cela se produit définitivement sous OS 3.0, je ne peux pas tester sur un appareil 2.X puisque je n'en ai pas avec un capteur de proximité. Cela ressemble à un bug. a répondu le 22 juillet 2009 à 5:49 Kevin Lambert


J'ai aussi rencontré ce problème. Il m'a fallu beaucoup de temps pour comprendre la vraie raison pour laquelle le capteur de proximité ne fonctionne pas. Lorsque l'orientation est UIInterfaceOrientationLandscapeLeft ou UIInterfaceOrientationLandscapeRight, le capteur de proximité ne fonctionne pas. en mode portrait, cela fonctionne bien. Mon iPhone est un iPhone 4S (iOS SDK 5.0).

2
wave_1102

Dans iPhone 3.0, le capteur de proximité est officiellement pris en charge. Regardez UIDevice proximityMonitoringEnabled dans la documentation.

2
Brian

Il n'y a pas d'API publique pour cela. 

2
Chris Lundie

Ces capteurs de proximité sont essentiellement une matrice de conducteurs. Les "fils" verticaux sont des pistes d’un côté d’une mince feuille d’isolant, les fils horizontaux de l’autre côté. Les intersections fonctionnent comme des condensateurs. Votre doigt porte une charge électrostatique, de sorte que la capacité de chaque jonction varie avec la proximité. Les FET amplifient le signal et la polarisation définit un seuil. En pratique, le circuit est plus complexe que cela, car il doit détecter un bruit relatif et rejeter.

Quoi qu’il en soit, la grille de capteurs vous indique qu’un effet de champ a été détecté et que cet effet est caractéristique d’un objet de la taille d’un doigt et reposant sur la surface de l’affichage. Le centroïde de la perturbation capacitive est calculé (probablement par le matériel) et les coordonnées sont (vraisemblablement) rapportées sous forme de nombres sur un port très probablement porté à l'attention du système d'exploitation du périphérique par une interruption. Dans quelque chose d'aussi sexy qu'un iPhone, il y a probablement un tampon de la dernière douzaine de positions pour qu'il puisse déterminer la direction et la vitesse. Celles-ci sont probablement également calculées par le matériel et présentées sous forme de nombres sur le même port.

1
Peter Wone

Pour éteindre l'écran, il est possible d'utiliser plus d'un capteur pour déterminer si l'écran doit être éteint ou non. Le capteur de proximité infrarouge décrit par Cryptognome en conjonction avec le capteur à écran tactile décrit par Peter Wone pourrait déterminer si l'iPhone est maintenu près de votre visage (ou autre chose avec une légère charge électrique) ou si elle est très proche de quelque chose -animer.

0
user183578

@Dipak Patel & @Coderer

Vous pouvez télécharger le code de travail à l'adresse suivante: http://spazout.com/google_cheats_independent_iphone_developers_screwed

Il a une implémentation fonctionnelle de proximitéStateChanged une méthode non documentée dans UIApplication.

J'espère que cela t'aides.

0
chews