Maison > Questions et réponses > le corps du texte
在APP中定义一个时间(假设为5分钟),记录两次操作APP之间的时间间隔,如果大于之前定义的时间,则APP端实现发出命令,手机屏幕熄灭。该功能要如何实现?
PHP中文网2017-04-18 10:55:12
Le premier point est la fonction d'écran de verrouillage. Vous pouvez vous référer à : https://github.com/chniccs/Lo...
Ce petit projet est l'implémentation de la fonction d'écran de verrouillage, avec un petit montant. de code.
Un autre point est de voir comment vous définissez chaque opération. Ici, afficher une activité au premier plan sera considéré comme une opération. Vous pouvez également réécrire l'écouteur tactile pour définir certaines opérations tactiles comme une opération.
1. Écrivez une BaseActivity, envoyez un message retardé (diffusion ou autre gestionnaire) dans onResume (ceci est utilisé ici pour représenter une opération) et enregistrez l'heure actuelle (stockée dans une application personnalisée ou un singleton global ou un stockage de persistance )
2. Selon la méthode précédente d'envoi de messages retardés, telle que la diffusion, après avoir reçu le message diffusé, comparez la valeur temporelle actuelle avec la valeur temporelle enregistrée à l'étape 1, si elle est inférieure à la valeur temporelle définie, puis la différence entre les deux valeurs de temps (stockées et actuelles) est reprise comme délai puis une diffusion est envoyée. Lorsque la diffusion sera reçue la prochaine fois, elle sera à nouveau jugée. Si elle est supérieure ou égale à la valeur temporelle, l'écran de verrouillage sera appelé.
Explication : à l'étape 2, pourquoi devez-vous prendre la différence au lieu de renvoyer une diffusion à délai fixe ? En effet, après avoir envoyé la diffusion pour la première fois, vous pouvez effectuer certaines opérations, et ces opérations le feront ? être suivi plus tard. C'est-à-dire que lorsque vous recevez une diffusion différée, l'heure de la dernière opération n'est pas l'heure enregistrée lors de l'envoi de la diffusion, mais l'heure de la dernière opération réelle. Par conséquent, la valeur temporelle enregistrée doit être mise à jour après chaque opération.
Calcul de la différence : temps maximum fixe défini sans opération - (heure actuelle - heure de la dernière opération)
ringa_lee2017-04-18 10:55:12
Adopter la méthode postDelayed(Runnable, long) de Handler
1 Définir une classe Handler
Handler handler=new Handler();
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler.postDelayed(this, 2000);
}
};
2. Démarrer la minuterie
handler.postDelayed(runnable, 2000);
3. Arrêtez le chronomètre
handler.removeCallbacks(runnable);
C'est probablement la voie à suivre, vous décidez à votre rythme