如何更改 Android Things 设备上的日期?

How to change the date on Android Things device?

我在 Raspberry Pi 3 模型 B 上使用 Android Things Developer Preview。有什么方法可以设置正确的 date/time/timezone?

如果您的应用是系统应用,您可以按以下方式进行操作:

在您的Android清单中:

 <uses-permission android:name="android.permission.SET_TIME" />

在你的activity中:

    Calendar c = Calendar.getInstance();
    c.set(2009, 9, 9, 12, 0, 0);
    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    am.setTime(c.getTimeInMillis());

这会将系统时间设置为 2009/September/9th,see here for API docs

但是 要使用 SET_TIME 权限,您需要成为 system app.

不幸的是,当从 Android Studio 使用正常的 ADB 安装时,它不会将您的应用程序安装为系统应用程序。您需要使用其他 ADB 命令手动执行此操作。

这是可能的,因为您应该在任何开发人员设备上具有 root 访问权限,这里有一个演练解释了如何将您的 apk 作为系统应用推送,然后您可以如上设置时间!

https://android.stackexchange.com/questions/76976/how-to-install-app-as-system-app

https://android.stackexchange.com/questions/27/how-do-i-properly-install-a-system-app-given-its-apk

如果您没有权限(不是系统应用程序)您将在 LogCat:

中看到类似这样的错误
Caused by: java.lang.SecurityException: setTime: Neither user 10026 nor current process has android.permission.SET_TIME.
 at android.os.Parcel.readException(Parcel.java:1683)
 at android.os.Parcel.readException(Parcel.java:1636)
 at android.app.IAlarmManager$Stub$Proxy.setTime(IAlarmManager.java:224)
 at android.app.AlarmManager.setTime(AlarmManager.java:937)
 at com.blundell.MainActivity.onCreate(MainActivity.java:19)

最简单的方法可能是在 ADB 上使用 date shell 命令。它需要 root,但所有预览图像都应允许 root 访问。这是一个检查日期、设置日期然后验证日期更改是否卡住的示例:

$ adb root
  restarting adbd as root    
$ adb shell date
  Sat Jan  1 00:02:40 GMT 2000
$ adb shell date 1227120016
  Tue Dec 27 12:00:00 GMT 2016
$ adb shell date
  Tue Dec 27 12:00:02 GMT 2016

您可以通过 adb shell date -h 确定日期命令接受的格式。请注意,由于大多数开发套件没有电池供电的 RTC,此更改可能不会通过电源循环持续存在。