我正在尝试用C中的NDK本机代码设置设备时间。据我所知,最好的解决方案是使用settimeofday()。
struct timeval tv = {timet, 0};
struct timezone tz = {timezone, daylight}; // The second timezone is long int. Time lib extern which perfectly suits here.
if (settimeofday(&tv, &tz) != 0)
{
LOG(("settimeofday() failed: %s", strerror(errno)));
}
结果
settimeofday() failed: Read-only file system
在本地设置时间还有其他方法吗?有可能吗?我查看了只读文件系统部分的问题,但我没有Rooted设备。
提前致谢!
答案 0 :(得分:1)
如果没有足够的权限,您将无法设置设备时间,并且应用将无法在非root设备上获得该权限。从手册页:
EPERM The calling process has insufficient privilege to call settime-
ofday(); under Linux the CAP_SYS_TIME capability is required.
即使你设法设置它,下次设备通过网络更新时也可能会被覆盖。
你得到的是EROFS而不是EPERM,这有点奇怪。
答案 1 :(得分:1)
Android系统时钟映射到" / dev / alarm"它只具有非系统应用的读取权限。所以,如果你想改变股票设备上的时间,那你就不走运了。你必须使用 -
因此,如果您只想使用您的应用更改系统时间,则必须更改" / dev / alarm"的权限。是可写的(来自adb shell的chmod 666 / dev / alarm)。要做到这一点,你需要一个有根设备。
更改权限后,您可以使用应用程序中的Java API更改时间(SystemClock.setCurrentTimeMillis())。
我仍然无法使用settimeofday()或clock_settime()。
希望这有帮助。