Mantenere l'attività in esecuzione sul block dello schermo quando gli schermi vengono utilizzati

Così ho costruito un'applicazione che funge da sostituzione dello schermo di block. Utilizzo un ricevitore di trasmissione e un servizio per avviare la mia attività dopo Intent.ACTION_SCREEN_OFF . In modo che each volta che l'utente blocca lo schermo inizia la mia attività, quindi quando premono il button di sblock, la mia attività è già in esecuzione sullo schermo di block. Ma questo funziona solo se l'utente tenta di svegliare / sbloccare il telefono dopo un breve periodo di tempo. Se aspettano troppo tempo l'attività è scomparsa. Non so perché questo sta accadendo e cosa posso fare per mantenere l'attività lì, non import quanto tempo l'utente aspetta di provare a sbloccare il proprio telefono.

Ho pensato e provato ad ascoltare Intent.ACTION_SCREEN_ON ma poi c'è un ritardo tra l'ora in cui l'utente preme il button di alimentazione sul telefono per svegliarlo e quando l'applicazione viene caricata e visualizzata sullo schermo. Durante questo divario l'utente può vedere il sistema Android

  • Qual è il path del file system utilizzato dal Context.openFileOutput () di Android?
  • Impostare una variabile globale in gradle che può essere utilizzata nel file manifesto
  • Android-java- Come ordinare un elenco di oggetti per un certo valore all'interno dell'object
  • come risolvere l'errore "Hai superato la quota di richiesta giornaliera per questa API" in file xml google maps?
  • Scorrimento dell'elemento ListView Da destra a sinistra, mostrare il button di cancellazione
  • DexIndexOverflowException Con API di Google Maps
  • 2 Solutions collect form web for “Mantenere l'attività in esecuzione sul block dello schermo quando gli schermi vengono utilizzati”

    Cosa succede se si utilizza un wakelock . Per esempio:

     @Override public void onCreate(Bundle savedInstanceState) { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); wl.acquire(); // do your things, even when screen is off } @Override protected void onDestroy() { wl.release(); } 

    È necessario disporre anche di un'authorization wakelock AndroidManifest.xml

     uses-permission android:name="android.permission.WAKE_LOCK" 

    Un modo che si potrebbe desiderare di provare è assicurarsi che app non dormi mai. Su brevi soggiorni rimarrà in esecuzione. Su lunghi dormire la tua applicazione è addormentata. Sono stato in grado di aggirare questo me stesso con l'utilizzo del PowerManager.Wakelock. Soltanto il problema è che questo drena più batteria se l'applicazione utilizza i loops della CPU.

     /** wake lock on the app so it continues to run in background if phone tries to sleep.*/ PowerManager.WakeLock wakeLock; @Override public void onCreate(Bundle savedInstanceState) { ... // keep the program running even if phone screen and keyboard go to sleep PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); ... } // use this when screen sleeps wakeLock.acquire(); // use this once when phone stops sleeping wakeLock.release(); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.