【问题标题】:Unable to change system time in android studio无法在android studio中更改系统时间
【发布时间】:2026-02-16 03:10:02
【问题描述】:

我无法在我的 Android 应用上更改我的系统时间(不使用任何 UI)。

想法是:

  1. 检索当前系统时间
  2. 将当前时间向前和向后切换几个小时(不使用任何 UI) 请注意,Android 应用将在根设备中运行。

下面是我的代码:

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        btn_open = findViewById(R.id.btn_startxk);
        btn_open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SimpleDateFormat simpdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Calendar cal = Calendar.getInstance();
                String cur_time = simpdate.format(cal.getTime());
                Toast.makeText(MainActivity.this, cur_time, Toast.LENGTH_LONG).show();
                TimeManager timeManager = TimeManager.getInstance();
                cal.set(Calendar.MILLISECOND, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.HOUR_OF_DAY, 10);
                long timeStamp = cal.getTimeInMillis();
                timeManager.setTime(timeStamp);

    }

谁能帮我改正我的代码?

【问题讨论】:

  • TimeManager 适用于不再存在且无法在普通设备上运行的 Android Things 设备,您无法从应用程序设置系统时间。您需要有根设备
  • 感谢您的评论。事实上,我正在使用模拟器并且已经启用了 root 访问权限。

标签: java android android-studio datetime


【解决方案1】:

您需要 android.permission.SET_TIME。 之后通过 Context.getSystemService(Context.ALARM_SERVICE) 和它的方法 setTime() 使用 AlarmManager。

用于从 Activity 或 Service 将时间设置为 2010/1/1 12:00:00 的代码段:

Calendar c = Calendar.getInstance();
c.set(2010, 1, 1, 12, 00, 00);
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setTime(c.getTimeInMillis());

如果你要更改时区,方法应该很相似(见android.permission.SET_TIME_ZONE和setTimeZone)

【讨论】:

  • 这根本不设置系统时间
  • 我试过这个功能,但它不起作用,它只是立即使应用程序崩溃。
  • 请注意,android 应用程序应在根设备中运行。
  • 我在 ldplayer 4.0.63 上测试,一个安卓模拟器我已经启用了“Root Permission”
  • android studio 在“this.getSystemService”上显示红色我需要添加任何额外的类来使用它吗?