Domanda

ho un conteggio alla rovescia che quando si spegne (a zero) controlla per vedere se l'applicazione è attiva. Se non si lancia una notifica nella barra di notifica. Quando si fa clic sulla notifica è ri-apre l'applicazione. Ora, tutto questo funziona bene, ma se lo schermo capita di andare fuori, il timer continua ad andare e la notifica è disponibile al momento giusto, ma mai effettivamente vibra o anelli fino a quando mi giro sul retro schermo. Poi viene visualizzata la notifica come se fosse in attesa in una coda o qualcosa del genere.

Come faccio a farlo in modo che il gestore di notifica sarà effettivamente avverte l'utente quando lo schermo è spento?

Aggiornamento: Se ho impostato il timer per 2 minuti, ci vogliono altri 2-3 minuti per la comunicazione alla realtà di lavoro. Così funziona ma è su un enorme ritardo!

Codice: Così ho messa a punto il servizio di notifica quando l'applicazione non è più attivo, e quando il MyCount1 è finito è controlla se l'applicazione ha messa a fuoco e, se non si vede la notifica. Tutto questo funziona quando la retroilluminazione dello schermo è acceso. Una volta che si va fuori di esso non è affidabile.

@Override
    public void onWindowFocusChanged(boolean hasFocus){
        if(hasFocus == false){
            mFocusFlag = false;

            ns = Context.NOTIFICATION_SERVICE;
            mNotificationManager = (NotificationManager) getSystemService(ns);
            icon = R.drawable.statusbar;
            tickerText = "Check the timer!!!";
            when = System.currentTimeMillis();
            notification = new Notification(icon, tickerText, when);
            context = getApplicationContext();
            contentTitle = "Countdown Timer";
            contentText = "Click to Check the Timer";
            notification.defaults |= Notification.DEFAULT_SOUND;
            notification.defaults |= Notification.DEFAULT_VIBRATE;
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
            notificationIntent = new Intent(this, StartTimer.class);
            contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
            notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

        }else{
            mFocusFlag = true;
        }

    }

public class MyCount1 extends CountDownTimer {
        public MyCount1(long millisInFuture, long countDownInterval) {
          super(millisInFuture, countDownInterval);
        }
        public void onFinish() {
          if(mFocusFlag == false){
              mNotificationManager.notify(HELLO_ID, notification);
          }else{
              mVib.vibrate(1000);
              }
        }
        public void onTick(long millisUntilFinished) {
            if((millisUntilFinished/1000%60) < 10){
                mTime.setText("1st Side = " + millisUntilFinished/60000 + ":0" + (millisUntilFinished / 1000)%60);
            }else{
                mTime.setText("1st Side = " + millisUntilFinished/60000 + ":" + (millisUntilFinished / 1000)%60);
            }
        }
       }
È stato utile?

Soluzione

  

Ora, tutto questo funziona bene, ma se lo schermo capita di andare fuori, il timer continua ad andare e la notifica è disponibile al momento giusto, ma mai effettivamente vibra o anelli fino a quando ho girare la schiena schermo. Poi viene visualizzata la notifica come se fosse in attesa in una coda o qualcosa del genere.

     

Come faccio a farlo in modo che il gestore di notifica sarà effettivamente avverte l'utente quando lo schermo è spento?

Quando lo schermo si spegne, la CPU smetterà di funzionare poco dopo, a meno che qualcosa sta tenendo una WakeLock.

Questo significa che una delle due cose:

  1. Si capisce tutto questo e in possesso di un WakeLock. Questo può o non può essere una buona idea, dal punto di vista di ciò che gli utenti, come con i loro dispositivi (ad esempio, buona durata della batteria). Sia come sia, potrebbe essere necessario tenere un WakeLock più forte, uno che mantiene lo schermo di almeno dim. Non ho provato sollevando una Notification mentre sotto un WakeLock, quindi sono incerti quali sono le regole sono tutti.

  2. Non capisco tutto questo, e quindi sono a pensare il timer sta andando, quando, in realtà, il dispositivo si è addormentato e la CPU è spento. Quando i giri della CPU riaccenderlo, il timer si spegnerà immediatamente.

Utilizzando AlarmManager permette di fare eventi timer-based che svegliano il dispositivo, e non richiedono il codice per essere appeso in giro in memoria nel frattempo. Non ho idea di quello che stai cercando di fare qui (sembra piuttosto bizzarra dalla tua descrizione), ma AlarmManager può essere qualcosa la pena di indagare come un sostituto per il timer.

Altri suggerimenti

Probabilmente si spegne quando il telefono è svegliato da qualche altra applicazione, ad esempio l'applicazione email va periodicamente per verificare la presenza di nuovi messaggi di posta elettronica. È necessario impostare il proprio allarme per il fuoco contro il tempo necessario. http://developer.android.com/reference/android/app/AlarmManager.html

NotificationManager non ha nozione del tempo. Deve essere attivato in qualche modo. Il problema nel tuo caso è che, se si lascia che il sonno telefono, lo farà proprio questo. Gli allarmi sono specificamente esistono in modo da poter riattivare il dispositivo quando è necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top