我在 Raspberry Pi 3 Model B 上使用 Android Things Developer Preview。有没有办法设置正确的日期/时间/时区?
2 回答
最简单的方法可能是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,因此此更改可能不会在电源循环中持续存在。
如果您的应用程序是系统应用程序,您可以按以下方式进行操作:
在您的 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)