Ответ 1
Если у вас есть правильное разрешение (см. ниже), вы можете сделать это с помощью AlarmManager
. Например, чтобы установить время до 2013/08/15 12:34:56, вы можете сделать:
Calendar c = Calendar.getInstance();
c.set(2013, 8, 15, 12, 34, 56);
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setTime(c.getTimeInMillis());
Для этого вам нужно разрешение SET_TIME
. К сожалению, это signatureOrSystem
.
Определение в AndroidManifest.xml:
<!-- Allows applications to set the system time -->
<permission android:name="android.permission.SET_TIME"
android:protectionLevel="signature|system"
android:label="@string/permlab_setTime"
android:description="@string/permdesc_setTime" />
Единственными приложениями, которые могут использовать это разрешение, являются:
- Подпись с изображением системы
- Установлен в папку
/system/
Если вы не создадите пользовательские ПЗУ, вам не повезет с первым.
Во-вторых, это зависит от того, что вы делаете.
-
Если вы создаете приложение для широкого распространения (Google Play и т.д.), вы, вероятно, не должны. Это только вариант для пользователей root, и вы сможете установить его только вручную. Любая торговая площадка не будет устанавливать ее в нужное место.
-
Если вы создаете приложение для себя (или просто как учебное упражнение), пойдите для него. Однако вам понадобится укоренившийся телефон, так что сделайте это первым. Затем вы можете установить приложение прямо на
/system/app/
с помощью ADB или файлового менеджера. Подробнее см. Статьи как это.
Последнее замечание: разрешение SET_TIME
и AlarmManager#setTime()
были добавлены в Android 2.2 (API 8
). Если вы пытаетесь сделать это в предыдущей версии, я не уверен, что она вообще будет работать.