Невозможно изменить системное время в Android studio

#java #android #android-studio #datetime

Вопрос:

Я не смог изменить свое системное время( без использования какого-либо пользовательского интерфейса) в своем приложении для Android.

Идея в том, чтобы:

  1. Получить текущее системное время
  2. Переключите текущее время вперед и назад на несколько часов( без использования пользовательского интерфейса) Обратите внимание, что приложение для 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);

    }
 

Кто-нибудь может помочь исправить мой код?

Комментарии:

1. TimeManager предназначен для устройств Android, которые на самом деле больше не существуют и не будут работать на обычных устройствах, вы не можете установить системное время из своего приложения. Вам нужно иметь корневое устройство

2. Спасибо за ваш комментарий. Введите im с помощью эмулятора и уже включите корневой доступ.

Ответ №1:

Вам нужно разрешение android.SET_TIME. Затем используйте AlarmManager через Context.getSystemService(Контекст.ALARM_SERVICE) и его метод setTime().

Фрагмент для установки времени на 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.разрешение.SET_TIME_ZONE и setTimeZone)

Комментарии:

1. Это вообще не устанавливает системное время

2. Я пробовал эту функцию, но она не работает, она просто немедленно выводит приложение из строя.

3. Обратите внимание, что приложение для Android должно запускаться на корневом устройстве.

4. я тестирую ldplayer 4.0.63, эмулятор для Android, в котором я уже включил «Корневое разрешение».

5. Каким-то образом android studio показывает красный цвет на «this.getSystemService», Нужно ли мне добавлять какой-либо дополнительный класс, чтобы использовать это?