如何以编程方式设置设备的时间

时间:2013-07-30 06:17:09

标签: android datetime

我创建了一个应用程序,用服务器时间替换当前的显示时间。我已经尝试了很多,但我找不到解决方案。如何将其设置为我的设备?

我知道如何在我的Android设备上获得服务器时间。是否可以实时,特别是在Android上?

  • 服务器时间会在我的按钮点击事件中自动设置为我的设备。

4 个答案:

答案 0 :(得分:60)

如果您拥有正确的权限(请参阅下文),则可以使用AlarmManager执行此操作。例如,要将时间设置为2013/08/15 12:34:56,您可以执行以下操作:

Calendar c = Calendar.getInstance();
c.set(2013, 8, 15, 12, 34, 56);
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setTime(c.getTimeInMillis());

您需要权限SET_TIME才能执行此操作。不幸的是,这是signatureOrSystem权限。

AndroidManifest.xml:

中的定义
    <!-- Allows applications to set the system time -->
    <permission android:name="android.permission.SET_TIME"
        android:protectionLevel="signature|system"
        android:label="@string/permlab_setTime"
        android:description="@string/permdesc_setTime" />

唯一可以使用此权限的应用是:

  • 使用系统映像签名
  • 已安装到/system/文件夹

除非您构建自定义ROM,否则第一个就不行了。

第二,这取决于你在做什么。

  • 如果您要构建广泛分发的应用(Google Play等),您可能不应该这样做。它只是root用户的一个选项,您只能手动安装它。任何市场都不会将其安装到正确的位置。

  • 如果你正在为自己构建一个应用程序(或者只是作为一个学习练习),那就去吧。不过,你需要一部扎根手机,所以先做。然后,您可以使用ADB或文件管理器将应用程序直接安装到/system/app/。有关详细信息,请参阅文章like this


最后一点说明:Android 2.2(SET_TIME)中添加了AlarmManager#setTime()权限和API 8。如果您尝试在以前的版本上执行此操作,我不确定它是否会起作用。

答案 1 :(得分:11)

试试这个:

您可以使用下一个命令:

adb shell date -s YYYYMMDD.HHmmss

示例:

adb shell date -s 20120423.130000

将日期设置为2012年4月23日星期一13:00:00

或者你也可以试试这个:

startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));

希望它能帮助!!

答案 2 :(得分:4)

简答:

如果您计划在appstore中安装应用,或者将时间更新为服务器时间,则无法执行此操作

  

您需要SignatureOrSystem权限才能更改时间   根据服务器的日期。

您可能必须 root您的设备,然后实施更改。

  

thread 应该对您有所帮助,以便更好地理解它。

答案 3 :(得分:1)

我已经完成了相同的两周,现在我得到了一个带有root设备的解决方案

  1. 获取服务器时间
  2. &#13;
    &#13;
    <?php echo date("Ymd.His "); ?>
    &#13;
    &#13;
    &#13;

    1. 在onClick方法

      Process loProcess = Runtime.getRuntime().exec("su"); DataOutputStream loDataOutputStream = new DataOutputStream(loProcess.getOutputStream()); //loDataOutputStream.writeBytes("date -s 20120419.124012; \n"); loDataOutputStream.writeBytes("date -s" + theStringReturnedValue+ "; \n");

    2. 请注意,theStringReturnedValue必须具有此格式20150216.124012,这与php中返回的格式相同