2012-01-24 10 views
15

Ciao Voglio impostare la sveglia quando il telefono non è stato toccato. Se lo schermo non è stato toccato per circa 2 minuti, il suono della sveglia si alza. Come posso fare questo? Qualcuno può aiutarmi? Grazie in anticipo.Come impostare la sveglia quando il cellulare è inattivo con Android?

+3

Hai la parte di rilevare l'utente che non tocca lo schermo per due minuti? - Sembra complicato: http://stackoverflow.com/questions/4208730/how-to-detect-user-inactivity-in-android – Nobita

+1

intendevi dire come screen saver? – Lucifer

+0

No, non è così. Volevo dire che voglio impostare la sveglia quando la mia applicazione è rimasta inattiva per 30 secondi. Questo è tutto. – malavika

risposta

5

Passare il codice AlarmService tramite il codice riportato di seguito. Questo troverà quanto a lungo il dispositivo è rimasto inattivo.

idle.java

Handler hl_timeout = new Handler(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try{ 
     hl_timeout.postDelayed(DoOnTimeOut, 15000); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
} 

// Toast 
Thread DoOnTimeOut = new Thread() { 
    public void run() { 
     try{ 
      Toast.makeText(getApplicationContext(), "System is idle", Toast.LENGTH_LONG).show(); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}; 

@Override 
public void onUserInteraction() 
{ 
    super.onUserInteraction(); 
    //Remove any previous callback 
    try{ 
    hl_timeout.removeCallbacks(DoOnTimeOut); 
    hl_timeout.postDelayed(DoOnTimeOut, 15000); 
    }catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

Spero che questo ti aiuta.

3

È possibile creare AlarmService per riprodurre l'audio anche quando l'applicazione/dispositivo è inattivo

Estendere Metodo onUserInteraction di classe di attività per azzerare il timer e ripartire per due minuti.

2

Se ho compreso correttamente la domanda, è necessario attivare un allarme, quando non si verificano interazioni dell'utente entro un intervallo di tempo. E uno dei requisiti principali, non c'è la tua attività in esecuzione in primo piano. Quindi il caso di onUserInteraction non funziona per te. In questo caso è ancora possibile ricevere aggiornamenti su ogni azione dell'utente se si crea il proprio AccessibilityService.

Aggiungi questo al vostro manifesto per dichiarare il servizio:

<service android:name=".MyAccessibilityService"> 
    <intent-filter> 
     <action android:name="android.accessibilityservice.AccessibilityService" /> 
    </intent-filter> 
</service> 

E l'implementazione del servizio dovrebbe essere simile a questo:

public class MyAccessibilityService extends AccessibilityService 
{ 

@Override 
public void onServiceConnected() { 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    // we are interested in all types of accessibility events 
    info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; 
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
    // we want to receive events in a certain interval 
    info.notificationTimeout = 100; 
    setServiceInfo(info); 

    Log.e("ALEX", "service connected!"); 
} 
@Override 
public void onAccessibilityEvent(AccessibilityEvent arg0) 
{ 
    Log.e("ALEX", "Event happened!"); 

} 
} 

Ora qualsiasi utente momento tocca lo schermo, ad esempio, si vuole get onAccessibilityEvent() attivato e sarà in grado di riavviare un timer che avvierà il tuo allarme.

TUTTAVIA, questo approccio ha uno svantaggio: per farlo funzionare, è necessario andare alle impostazioni del telefono -> Accessibilità e abilitare la vostra applicazione lì. In caso contrario, il sistema non avvierà il servizio.