3

我在 Raspberry Pi 3 Model B 上使用 Android Things Developer Preview。有没有办法设置正确的日期/时间/时区?

4

2 回答 2

4

最简单的方法可能是date在 ADB 上使用 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,因此此更改可能不会在电源循环中持续存在。

于 2016-12-27T20:02:23.263 回答
4

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

在您的 AndroidManifest 中:

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

在您的活动中:

    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,请参阅此处获取 API 文档

但是,要使用SET_TIME权限,您需要成为系统应用程序

不幸的是,当从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)
于 2016-12-27T12:48:57.760 回答