2010-11-30 4 views
0

J'utilise getResources(). GetConfiguration(). HardKeyboardHidden pour détecter si un tiroir de clavier coulissant est ouvert sur un périphérique (comme sur le G1).Comment détecter le clavier FIXED sur Droid Pro?

Maintenant, j'ai un Droid Pro, et il revient toujours 1, donc mon application pense qu'il a un curseur ouvert.

Y a-t-il une façon dont je peux dire que l'appareil possède un clavier et qu'il est TOUJOURS ouvert?

TIA

Répondre

0

Le résultat vous donne est exacte, donc je ne vois aucun problème avec le résultat qu'il vous donne. Il suffit que votre application prenne en compte les changements de configuration, et si elle ne reçoit jamais un état caché du clavier, supposez qu'elle est toujours ouverte. Votre application doit réagir de manière identique si le périphérique est un curseur et si le clavier est exposé et si le périphérique affiche toujours le clavier. Je ne suis donc pas sûr de ce que vous souhaitez accomplir.

Si vous avez vraiment besoin de savoir si le clavier est toujours ouvert, ajoutez simplement du code pour déterminer si l'appareil possède un clavier toujours affiché en identifiant simplement le périphérique utilisé. Si vous voulez prendre en charge n'importe quel appareil disposant d'un clavier toujours affiché, vous pouvez être paresseux et demander à l'utilisateur de sauvegarder le résultat. Vous pouvez également continuer à mettre à jour votre application lorsque vous découvrez d'autres appareils répondant à ces critères.

+0

Merci beaucoup pour répondre. Je suis d'accord que l'application devrait se comporter de la même manière. C'est ce qu'il fait, et c'est le problème - je suppose que si le clavier est ouvert, l'appareil sera en paysage, donc je l'ai formé. Mais sur le Droid Pro le clavier est ouvert, mais l'appareil est en portrait ... –

+0

J'ai adopté mon code pour ne pas forcer le paysage. –

+0

Espérons qu'un jour ils vont ajouter quelque chose comme KEYBOARD_NONE, KEYBOARD_FIXED, KEYBOARD_POTRAIT et KEYBOARD_LANDSCAPE et vous permettent d'interroger cela. – ddcruver

2

Je suis confronté à un problème similaire, dans CM, application de téléphone.

À ce jour, l'application de téléphone se comporte comme ça:

  • Si le clavier est ouvert, l'écran reste allumé même pendant un appel. Capteur de proximité ne sera pas utilisé pour demander si l'appareil est à l'entendre ou non:

    mIsHardKeyboardOpen être vrai conduit à screenOnImmediately étant définie sur true aussi:

      boolean screenOnImmediately = (isHeadsetPlugged() 
            || PhoneUtils.isSpeakerOn(this) 
            || ((mBtHandsfree != null) && mBtHandsfree.isAudioOn()) 
            || mIsHardKeyboardOpen); 
    

Dans le cas d'un clavier physique fixe, il est toujours ouvert (pas glissant, et en position ouverte).

Si je conserve le code actuel, l'application Téléphone ne sera jamais hors de l'écran en utilisant le capteur de proximité.

S'il n'y a aucun moyen de deviner si le clavier est fixe ou glissant, je vais définir une nouvelle propriété système ro.product.has_fixed_keyboard, et la définir sur 1 dans mon appareil, puis changer le code de l'application Téléphone pour contourner le KeyboardOpen vérifier en cas ro.product.has_fixed_keyboard est 1.

EDIT (23/11/2012): voici la mise en œuvre, fusionné CM7: http://review.cyanogenmod.org/#/c/11926/

Questions connexes