Можно ли установить System DateTime из моего приложения для Android? - PullRequest
13 голосов
/ 05 июля 2011

Я хочу установить системные часы на SystemClock.setCurrentTimeMillis, но встретил следующую ошибку:

"Unable to open alarm driver: Permission denied"

Ниже приведено описание setCurrentMillis API с сайта разработчиков Android:

public static boolean setCurrentTimeMillis (long millis) 

С тех пор: API Level 1 Устанавливает текущее время стены в миллисекундах. Требуется, чтобы вызывающий процесс имел соответствующие разрешения.

Возвращает если часы были успешно установлены на указанное время.

Итак, приложению необходимо получить разрешение на установку времени. В AndroidManisfest.xml я вставил android.permission.SET_TIME, но у меня та же ошибка сообщения.

Я пробовал различные решения, найденные в Интернете, и кажется, что невозможно установить системное время без рута даже на FroYo (Android 2.2), где была введена android.permission.SET_TIME, обычное приложение не может получить это разрешение, потому что / dev / alarm файл имеет 664 permission. Таким образом, решение состоит в том, чтобы изменить разрешение в 666, но для этого требуется рутованное устройство и оно слишком инвазивно, чтобы быть решением.

Я хочу создать приложение для своей компании для синхронизации данных между различными системами, и очень важно иметь синхронизированные часы.

Заранее благодарю за готовность

Затмения

Ответы [ 3 ]

11 голосов
/ 18 июля 2011

затмений,

Я проверил вас и нашел открытый билет в 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#plevel

Короче говоря, в настоящее время нет способа изменить время программно без рутирования телефона.

И последнее замечание: если вы хотите использовать Custom roms, у Cyanogenmod также есть открытый билет для добавления способности к их rom.

http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=CyanogenMod+SET_TIME

Надеюсь, это поможет некоторым, George

3 голосов
/ 05 июля 2011

Согласно этой записи , SET_TIME - правильное разрешение, но оно будет работать только на рутованном телефоне.

1 голос
/ 29 июля 2012

мы сделали это.Ничего страшного, если вы можете получить разрешение SET_TIME.См. Мой ответ на аналогичный вопрос .

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

...