2014-04-14 20 views
7

Come svegliare il telefono Android da sospensione (sospendi a mem) programmabile? Non voglio acquisire alcun wakelock, il che significa che il telefono va in "reale" sleep con la CPU disabilitata. Immagino di poter usare un qualche tipo di meccanismo RTC (real time clock)?come svegliare il telefono Android dal sonno?

Qualcuno ha qualche esempio?

Grazie.

+0

Quando esattamente vuoi svegliarsi? Dopo un certo timeout? A una certa data e ora? –

+0

Hai trovato una soluzione? Trovi qualche risposta utile? – bendaf

+0

Per favore, se trovi la risposta alla tua domanda accettane una dal basso, o modifica la tua domanda in modo che possa aiutarti ulteriormente. – bendaf

risposta

0

Utilizzare AlarmManager per trasmettere un Intento nel momento in cui si desidera eseguire il lavoro e attivare il dispositivo. Nel BroadcastReceiver, o fare il lavoro che devi fare (se è breve), o ottenere un WakeLock (probabilmente tramite un singleton), avviare un servizio, fare eseguire il servizio, quindi fare rilasciare il servizio il Wakelock.

Si può leggere su questo qui: https://groups.google.com/forum/#!topic/android-developers/5--QRAPlFL0

+1

hmmm ..., ho provato AlarmManager e sembrava non svegliare il telefono se il telefono è in "reale" sonno (senza wakelock). – jiawen

+1

Come svegliare il telefono quando è in modalità di sospensione. –

+0

@jiawen AlarmManager funzionerà con setAndAllowWhileIdle() o setExactAndAllowWhileIdle() invece di set(). Gli allarmi impostati in questo modo verranno sottoposti a bradcast anche quando il dispositivo è in stato di stop. – Karthiksrndrn

7

Al fine di consentire l'attività svegliarsi il dispositivo e non richiedere una password/colpo, è sufficiente aggiungere un paio di bandiere. Per ottenere questo, includere al codice:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

Questo sarà wake up vostra attività App.

1

ho appena scritto un software che può fare questo, ecco qualche esempio di codice: In primo luogo, creo un AlarmManager e impostare un allarme per un tempo specifico:

AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 15); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 
// if the time is before now then add one day to it 
if(calendar.getTimeInMillis() < System.currentTimeMillis()) 
    calendar.setTimeInMillis(calendar.getTimeInMillis()+86400000); 
manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0); 

Ho bisogno di un BroadcastReciever per ricevere questo allarme. Per questo devo mettere nel mio manifesto:

<application ...> 
    <receiver android:name="hu.bendaf.example.AlarmReceiver"/> 
... 
</application> 

e ho anche la classe AlarmReciever, che inizia la mia attività principale recieve:

public class AlarmReceiver extends BroadcastReceiver { 
    public static final String WAKE = "Wake up"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Starting MainActivity 
     Intent myAct = new Intent(context, MainActivity.class); 
     myAct.putExtra(WAKE, true); 
     myAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(myAct); 
    } 
} 

e nella funzione onCreate della mia attività ho:

// Wake up phone if needed 
if(getIntent().hasExtra(AlarmReceiver.WAKE) && getIntent().getExtras().getBoolean(AlarmReceiver.WAKE)){ 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
         WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
} 

Questo codice sveglia il mio telefono alle 15:30:00 seguenti (o è oggi o domani).

+0

La sveglia si attiva solo dallo standby o anche dalla modalità di sospensione? – ransh

+0

Poiché questa risposta dice http://stackoverflow.com/a/5120225/3162918 è garantito che funzioni anche in modalità sleep. Questo è stato ciò che hanno confermato anche i miei test, l'allarme stava svegliando app il mio telefono in ogni situazione, tranne che era spento. – bendaf

Problemi correlati