Можно ли установить System DateTime из моего приложения для Android?
Я хочу установить системные часы SystemClock.setCurrentTimeMillis
, но встретил следующую ошибку:
"Unable to open alarm driver: Permission denied"
Ниже приводится описание setCurrentMillis
API с сайта разработчиков Android:
public static boolean setCurrentTimeMillis (long millis)
Since: API Level 1 Устанавливает текущее время стены в миллисекундах. Требует, чтобы вызывающий процесс имел соответствующие разрешения.
Возвращает, если часы были успешно установлены на указанное время.
Итак, приложению необходимо получить разрешение на установку времени. В AndroidManisfest.xml я вставил android.permission.SET_TIME
но у меня такая же ошибка сообщения.
Я пробовал различные решения, найденные в интернете, и кажется, что невозможно установить системное время без рута даже на FroYo (Android 2.2), где android.permission.SET_TIME
было введено, обычное приложение не может получить это разрешение, потому что файл /dev/alarm имеет 664 permission
, Таким образом, решение состоит в том, чтобы изменить разрешение в 666
но требуют корневого устройства и слишком агрессивны, чтобы быть решением.
Я хочу создать приложение для своей компании, чтобы синхронизировать данные между различными системами, и важно иметь синхронизированные часы.
Заранее благодарю за готовность
Затмения
3 ответа
Затмения,
Я проверил вас по этому вопросу и нашел открытый билет в Google, чтобы решить эту проблему. Единственное, что тег открыт с 8 ноября 2009 года. По сути, только система может изменять время даже с разрешениями. Согласно комментариям к ссылке ниже, разработчик провел некоторое исследование и отметил, что когда было создано разрешение SET_TIME, ему не был предоставлен соответствующий уровень защиты в ОС (сигнатура или система опасна). В результате он не делает то, что должен делать.
http://code.google.com/p/android/issues/detail?id=4581
Вот объяснение различных уровней защиты, которые могут иметь разрешения. В настоящее время, по словам разработчика, выше, SET_TIME имеет "signatureorSystem", когда он должен иметь "опасный".
http://developer.android.com/guide/topics/manifest/permission-element.html
Короче говоря, в настоящее время нет способа изменить время программно без рута телефона.
И последнее замечание: если вы хотите использовать Custom roms, у Cyanogenmod также есть открытый билет для добавления способности к rom.
http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=CyanogenMod+SET_TIME
Надеюсь, это поможет некоторым, Джордж
Согласно этому сообщению, SET_TIME - правильное разрешение, но оно будет работать только на рутованном телефоне.
Мы сделали это Ничего страшного, если вы можете получить разрешение SET_TIME. Смотрите мой ответ на аналогичный вопрос.
Что касается других ответов о том, что без рутирования телефона это невозможно, то это относится только к получению разрешения. Для этого смотрите здесь и здесь.