Можно ли установить System DateTime из моего приложения для Android?

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

"Unable to open alarm driver: Permission denied"

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

public static boolean setCurrentTimeMillis (long millis) 

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

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

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

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

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

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

Затмения

Ответ 1

Затмение,

Я проверил вас на этом и нашел открытый билет с Google, чтобы исправить эту проблему. Единственное, что тег был открыт с 8 ноября 2009 года. В принципе, только система может изменить время даже с разрешением. Согласно комментариям по ссылке ниже, разработчик сделал некоторые исследования и отметил, что когда было создано разрешение SET_TIME, ему не был предоставлен соответствующий уровень защиты в ОС (угроза сигнатуры подсистемы v.s). В результате он не делает того, что он должен делать.

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, чтобы добавить возможность их рома.

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

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

Ответ 2

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

Ответ 3

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

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