我正在编写一个闹钟应用程序。
在我的应用程序中,我以这种方式将下一个闹钟时间放在锁定屏幕上:
Settings.System.putString(context.getContext().getContentResolver(),
Settings.System.NEXT_ALARM_FORMATTED, systemAlarmString);
并通过这种方式将系统警报图标设置到通知栏的右侧:
Intent alarmChanged = new Intent("android.intent.action.ALARM_CHANGED");
alarmChanged.putExtra("alarmSet", showSystemAlarmIcon);
context.getContext().sendBroadcast(alarmChanged);
并通过 NotificationManager 将程序图标放到通知栏的左侧
当我的程序设置下一个闹钟时间时,一切都很好。
但是在我关闭程序一段时间后,锁定屏幕上的下一个闹钟时间和通知栏右侧的系统闹钟图标消失了。
通知栏左侧的通知图标没有消失。
我发现删除下一个警报的不是我的程序。我尝试始终将常量字符串设置为锁定屏幕并始终显示系统警报图标。然而它们消失了:锁屏显示空字符串并且系统警报图标被隐藏。
我想,其他一些程序会这样做。但是我检测不到。
我的测试手机是三星 Galaxy S。在模拟器上一切正常,但那里没有第三方程序。
我找到了问题所在。
标准闹钟有时会清除下一个闹钟时间。
标准闹钟中没有闹钟,但有时它会醒来并造成他的坏事:)
在我的情况下,解决方案是捕获“android.intent.action.ALARM_CHANGED” Intent 并稍后恢复下一个警报数据。
最佳答案
设置带有 Intent 的警报图标,包括一些附加功能。
Intent alarmChanged = new Intent("android.intent.action.ALARM_CHANGED");
alarmChanged.putExtra("alarmSet", enabled);
alarmChanged.putExtra("from", context.getPackageName());
context.sendBroadcast(alarmChanged);
接收 Action ,“android.intent.action.ALARM_CHANGED”
如果“alarmSet”为假并且“from”不是你想要的(意味着另一个应用程序触发警报关闭)
然后重置警报和警报图标。
if (action.equals("android.intent.action.ALARM_CHANGED")) {
boolean enabled = intent.getBooleanExtra("alarmSet", false);
String pkgName = intent.getStringExtra("from");
if (!context.getPackageName().equals(pkgName)) {
if (!enabled) {
// TODO if enabled alarms exist then reset alarm and alarm icon
}
}
}
关于android - 如何避免在锁定屏幕上的下一个闹钟时间消失?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7899712/