Управление значком будильника в строке состояния

Этот вопрос относится к версиям Android до Lollipop. Для Lollipop API проверьте соответствующий вопрос:


Я хотел бы знать, как включить / выключить значок системного будильника в строке состояния, как показано на этом изображении:

Значок будильника системы Android

Из того, что я понимаю о системе и что я читал в прошлом, она управляется встроенным приложением системного будильника. И сторонние приложения не имеют над ним контроля на нерутированном устройстве. Нет никаких причин, по которым мы должны быть в состоянии это контролировать.

Однако Timely v1.2.7 управляет этим значком на моем Galaxy Nexus v4.2.1 и Nexus 5 v4.4.2 без рута. Так что можно.

Интересно, как это сделать на нерутированном устройстве. Я подозреваю взлом или недокументированный код, но все же интересно, может ли кто-нибудь пролить свет.


person Richard Le Mesurier    schedule 16.04.2014    source источник
comment
когда я отменю будильник, значок спрячется?   -  person zys    schedule 26.01.2016
comment
@Lollipop да, значок будильника обычно отображается, когда есть будильник, и скрывается, когда будильника нет   -  person Richard Le Mesurier    schedule 26.01.2016
comment
У меня проблема, часы создаются путем изменения базы данных системных часов. Кроме того, это будет значок, но когда я удаляю данные, значок все еще отображается   -  person zys    schedule 26.01.2016
comment
@Lollipop Я думаю, что если вы расскажете все подробности в совершенно новом вопросе, у вас будет хороший шанс получить помощь.   -  person Richard Le Mesurier    schedule 26.01.2016


Ответы (1)


v5 леденец

Lollipop, наконец, удалил эти частные функции API. Эта техника больше не работает с v5.

Я опубликовал новый вопрос конкретно о Lollipop, на который есть ответ:

Пре-леденец

Вот как это делается с помощью свойств private API:

protected void setStatusBarIcon(boolean enabled)
{
    Intent alarmChanged = new Intent("android.intent.action.ALARM_CHANGED");
    alarmChanged.putExtra("alarmSet", enabled);
    sendBroadcast(alarmChanged);
}

Спасибо Энди Сэвиджу в этой ветке групп Google:


Важное примечание: как указано выше, здесь используются частные недокументированные свойства. Все обычные предупреждения применимы к этому, как указала Дайанн Хакборн в той же теме:

Обратите внимание, что когда вы видите такую ​​необработанную строку ("android.intent.action.ALARM_CHANGED" и "alarmSet"), у вас в голове должно звучать предупреждение о том, что это использует частные API.

И это действительно так.

Если вы используете это, не удивляйтесь, если оно сломается в будущем, случайно не работает на некоторых устройствах.

person Richard Le Mesurier    schedule 16.04.2014