Можно ли установить 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. Смотрите мой ответ на аналогичный вопрос.

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

Другие вопросы по тегам