Il existe un cadre privé (MobileTimer.framework) initialement prévu iOS app stock, horloge pour manipuler les horloges et le système alarmes.
Évidemment, nous n'utiliserons que deux classes pour traiter les alarmes, AlarmManager et Alarm. Tout d'abord, nous devons obtenir l'instance singleton de AlarmManager.
AlarmManager *manager = [AlarmManager sharedManager];
Avant d'accéder aux alarmes, vous devez d'abord charger les alarmes.
[manager loadAlarms];
Ensuite, vous pouvez accéder au tableau contenant toutes les alarmes disponibles (d'alarme) dans l'application Horloge.
NSArray *alarms = [manager alarms];
Cependant, il y a un problème dans le cadre lors du chargement des alarmes. Par exemple, le code est en cours d'exécution dans SpringBoard, tandis que dans le même temps les alarmes sont en cours de modification dans l'application Stock horloge. Même si vous chargez à nouveau les alarmes dans SpringBoard, les données d'alarme renvoyées sont toujours obsolètes. Pour résoudre ce problème, accrochez une méthode de classe dans AlarmManager à force de synchroniser les valeurs de préférence avant la méthode d'origine lire à partir de la préférence.
%hook AlarmManager
+ (id)copyReadAlarmsFromPreferences {
CFPreferencesAppSynchronize(CFSTR("com.apple.mobiletimer"));
return %orig;
}
%end
Enfin, avant d'appeler refreshActiveState
isActive
peut être un moyen de lire si l'alarme est activée ou non. Plutôt que de copier un article de blog, proposez votre propre * résumé. *
Voir [Comment référencer le matériel écrit par d'autres utilisateurs] (https://stackoverflow.com/help/referencing) dans le centre d'aide. –