13

我想通过 设置系统时钟SystemClock.setCurrentTimeMillis,但遇到以下错误:

"Unable to open alarm driver: Permission denied"

以下是setCurrentMillis来自 Android Developers Site 的 API 说明:

public static boolean setCurrentTimeMillis (long millis) 

自:API 级别 1 设置当前挂起时间,以毫秒为单位。要求调用进程具有适当的权限。

如果时钟已成功设置为指定时间,则返回。

因此,应用程序需要获得设置时间的权限。在我插入的AndroidManisfest.xmlandroid.permission.SET_TIME中,但我有相同的消息错误。

我尝试了在互联网上找到的各种解决方案,似乎即使在android.permission.SET_TIME引入的 FroYo (Android 2.2) 上也无法在没有 root 的情况下设置系统时间,普通应用程序无法获得此权限,因为/dev/alarm文件具有664 permission. 因此,解决方案是更改权限,666但需要根设备,并且侵入性太强而无法成为解决方案。

我想为我的公司创建一个应用程序以在不同系统之间同步数据,并且对于同步时钟至关重要。

预先感谢您的愿意

日食

4

3 回答 3

11

日食,

我在这方面为您做了很多检查,并找到了与 Google 一起解决问题的公开票。唯一的问题是标签从 2009 年 11 月 8 日开始开放。基本上只有系统可以更改时间,即使有权限。根据对下面链接的评论,开发人员做了一些研究,并指出当权限 SET_TIME 创建时,它没有在操作系统中提供适当的保护级别(签名或系统与危险)。结果,它没有做它应该做的事情。

http://code.google.com/p/android/issues/detail?id=4581

以下是权限可以具有的各种保护级别的说明。目前根据开发人员在上面引用的 SET_TIME 有“signatureorSystem”,当它应该有“危险”时。

http://developer.android.com/guide/topics/manifest/permission-element.html#plevel

简而言之,目前没有办法在不root手机的情况下以编程方式更改时间。

最后一点是,如果您想使用自定义 rom,还有一张 Cyanogenmod 的开放票,可以将功能添加到他们的 rom 中。

http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=CyanogenMod+SET_TIME

希望这会有所帮助,乔治

于 2011-07-18T13:50:06.833 回答
3

根据这篇文章, SET_TIME 是正确的权限,但它只适用于有根手机。

于 2011-07-05T15:30:46.327 回答
1

我们已经做到了。只要您能获得 SET_TIME 权限,这没什么大不了的。请参阅我对类似问题的回答

关于其他回答说如果不植根手机是不可能的,那么这仅指获得许可。为此,请参见此处此处

于 2012-07-29T11:26:23.087 回答