通过Android应用程序在按钮点击时更改Android手机的系统日期

6

我正在学习Android开发,尝试一些与Android相关的东西,现在我有一个场景。

  • 我想通过我的应用程序更改Android手机的系统日期( 首先我想知道这是否可行?

布局如下

layout

现在我想要的是当用户点击按钮时,日期应该增加20天,我该怎么做。

我无法开始...请帮忙。


你尝试了什么,还有哪些问题导致你无法启动?能否提供更多信息? - JustWork
1
那是不可能的。您需要SET_TIME权限,而该权限仅由系统授予Android系统映像中的应用程序。如果您能够获得该特权,则可以轻松地使用AlarmManager进行更改。 - Blackbelt
1
关于这个问题的更多有趣内容,请阅读:https://dev59.com/NXM_5IYBdhLWcg3wjj0p ;) - Trinimon
一段代码或涉及的类会很有帮助 - karan
Runtime.getRuntime().exec("su"); 成为root Runtime.getRuntime().exec("chmod 666 /dev/alarm"); - Blackbelt
显示剩余7条评论
4个回答

8

正如我之前所说,这是不可能的。您需要SET_TIME权限,该权限仅由系统授予安装在Android系统图像中的应用程序。如果您能获得该特权,则可以轻松更改AlarmManager。 SystemClock.setCurrentTimeMillis将写入/dev/allarm文件。

adb shell ls -l /dev/alarm
crw-rw-r-- system   radio     10,  46 2013-06-12 10:46 alarm
  • c表示字符型特殊文件(存储在/dev目录中)。
  • system是该文件的所有者。
  • radio是该文件的组。

system和radio具有读写权限(rw-,三个位,整数值为6),其他人只有读取权限(r,整数值为4)。因此,该文件的权限是664。如果您可以获得root用户权限(运行su命令),则可以更改该文件的权限并在其中编写新值。已提交错误报告以请求Google允许应用程序以编程方式修改移动日期,但被拒绝了。这里是参考资料。


1
很好的解释。您需要对设备进行root以获得超级用户访问权限。+1 - Raghunandan

4
在Android上,应用程序想要具有对时间和日期的写访问权限,唯一的方法是获取SET_TIME权限,这仅适用于“在Android系统映像中或使用与声明该权限的应用程序相同的证书签名的应用程序”(请参见签名或系统保护级别)。
您的应用程序要达到此保护级别的唯一方法是在已root设备上运行,或构建并签署自己的Android ROM。
如果您的情况是这样的,您可以轻松地使用AlarmManager或简单地使用Calendar实例。
祝您好运!

我认为这不仅仅是在已经root的设备上运行。我正在我的root Nexus 7上运行应用程序,即使我可以通过GPS信号设置时间(Smart GPS Time,像个冠军一样工作),但当我尝试时,我的代码立即崩溃。有什么想法缺失了吗? - Rich

0

普通用户应用程序没有更改设备时间的权限。请阅读以下帖子中cashbash的答案,以获取替代选项。


0

不幸的是,blackbelt是正确的;Android让我们做很多很酷的事情,但编程更改系统时间不是其中之一。

既然我看到你正在寻找更可靠/官方的来源,我建议你查看这个与Google的开放式工单,它表明这是一个公开的问题--它应该可以工作,但实际上并没有,而且似乎Google不会在短期内修复它。其要点是SET_TIME保护级别设置得比应该高。(有关权限的更多信息,请参见此处

虽然这与编程更改时间不完全相同,但如果出于某种原因确实需要更改系统时间,则仍然可以让用户为您更改系统时间。此线程将解释如何实现,如果您想采用这种方法。

希望这些信息对您有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接