我正在编写一个闹钟应用程序。
在我的应用程序中,我以这种方式将下一个闹钟时间放在锁定屏幕上:

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/

10-09 01:21