android: spegnerà lo schermo quando è vicino alla faccia

La mia applicazione consente all'utente di accedere alla propria posta vocale aziendale. Normalmente, quando si effettua una telefonata quando l'utente tiene il dispositivo all'orecchio, lo schermo si spegne in modo che non spingere accidentalmente i pulsanti con il proprio volto. Vorrei fare la mia app fare la stessa cosa quando l'utente sta ascoltando la propria voce.

chiunque sa come farlo?

  • Perché sto ottenendo un InvocationTargetException? Gioco Android 2D
  • I colors dell'icona del Design del materiale
  • Determinare se un utente ha installato la nostra applicazione tramite il collegamento Market
  • Come spostare, copiare ed eliminare i file e le directory in SD?
  • Calcola la differenza tra due volte in Android
  • Come utilizzare Asynctask in modo efficace
  • Come mantenere DropDownList di AutoCompleteTextView aperta dopo aver premuto il tasto Back?
  • Sovrascrivi i colors del menu di context in Android
  • In Android, c'è un modo per get la corrente della batteria?
  • Android Widget non avrà un clic
  • Eccezione Java.lang.Runtime: non è riuscito a catturare l'image?
  • string decodifica utf-8
  • 4 Solutions collect form web for “android: spegnerà lo schermo quando è vicino alla faccia”

    Quello che stai vedendo è l'uso di un sensore di prossimità. Per i dispositivi che lo hanno, è ansible accedervi tramite SensorManager .

    Se è consentito esaminare il codice open source senza causare problemi, controlla l'origine dell'applicazione Android Phone . In particolare src / com / android / phone / PhoneApp.java e src / com / android / phone / InCallScreen.java .

    Da src / com / android / phone / PhoneApp.java:

      //Around line 519 // Wake lock used to control proximity sensor behavior. if ((pm.getSupportedWakeLockFlags() & PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) != 0x0) { mProximityWakeLock = pm.newWakeLock( PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, LOG_TAG); } .... // Around line 1334 if (((state == Phone.State.OFFHOOK) || mBeginningCall)&& !screenOnImmediately) { // Phone is in use! Arrange for the screen to turn off // automatically when the sensor detects a close object. if (!mProximityWakeLock.isHeld()) { if (DBG) Log.d(LOG_TAG, "updateProximitySensorMode: acquiring..."); mProximityWakeLock.acquire(); } else { if (VDBG) Log.d(LOG_TAG, "updateProximitySensorMode: lock already held."); } } else { // Phone is either idle, or ringing. We don't want any // special proximity sensor behavior in either case. if (mProximityWakeLock.isHeld()) { if (DBG) Log.d(LOG_TAG, "updateProximitySensorMode: releasing..."); // Wait until user has moved the phone away from his head if we are // releasing due to the phone call ending. // Qtherwise, turn screen on immediately int flags = (screenOnImmediately ? 0 : PowerManager.WAIT_FOR_PROXIMITY_NEGATIVE); mProximityWakeLock.release(flags); } } 

    Inoltre, se si guarda al codice per la class PowerManager, PROXIMITY_SCREEN_OFF_WAKE_LOCK è documentato (ma nascosto) e dovrebbe fare quello che vuoi (non so però quale livello di API funziona), ma non in una tabella per qualche motivo .

     /** * Wake lock that turns the screen off when the proximity sensor activates. * Since not all devices have proximity sensors, use * {@link #getSupportedWakeLockFlags() getSupportedWakeLockFlags()} to determine if * this wake lock mode is supported. * * {@hide} */ public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = WAKE_BIT_PROXIMITY_SCREEN_OFF; 

    Se non abbiate paura di utilizzare una potenziale funzionalità senza documenti, dovrebbe fare esattamente quello di cui hai bisogno.

    a partire dal livello API 21 (Lollipop) è ansible get la prossimità di questa risistemazione:

     if(powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) { PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG); wakeLock.setReferenceCounted(false); return wakeLock; } else { return null; } } 

    allora è a voi acquisire e rilasciare la serratura.

    PS: PowerManager#getSupportedWakeLockFlags stato nascosto, ma esiste ora nomore. Hanno inventato invece isWakeLockLevelSupported .

    Probabilmente non è più necessario, ma per quelli che sono interessati al codice puoi avere uno sguardo al mio progetto SpeakerProximity all'indirizzo http://code.google.com/p/speakerproximity/

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.