Запуск активности из сервиса, когда активность переднего плана имеет CLOSE_SYSTEM_DIALOGS

#android

#Android

Вопрос:

Я создаю службу, способную запускать пакеты и действия из команд, отправленных удаленно (нет, это не вирус, это просто для бизнес-целей, когда моей компании необходимо удаленно управлять имеющимися у них устройствами). На основе этих команд я могу запускать действия с помощью:

 context.startActivity(new Intent(context, Activity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
  

Однако, имеет ли действие переднего плана CLOSE_SYSTEM_DIALOGS в качестве действия (я думаю, что это причина), действие, которое я хочу запустить, не запущено. Я не вижу никакого журнала сообщений…

Поскольку у меня есть рутированное устройство, я также попытался выполнить «su -c am start -n <MyActivity> но это тоже не работает.

Есть идеи?

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

1. С точки зрения удобства использования, не было бы лучше, чтобы ваши пользователи вместо этого видели уведомление?

2. Представьте, что я хочу удаленно открыть Chrome или действие службы, чтобы что-то настроить. Я не знаю, почему, но если активность переднего плана имеет это «действие», я ничего не могу сделать, кроме как отключить его (или, лучше сказать, я не знаю, как это сделать), при условии, что устройство имеет root. Из любого другого действия переднего плана, у которого нет этого действия, я могу запускать действия или запускать пакеты.

3. любое действие может перехватить «системный диалог» и закрыть его, возможно, это то, с чем вы боретесь.

4. Возможно, не по теме, но в моей системе для выполнения su -c требуется заключить команду в кавычки, если команда содержит пробелы. Или замените пробелы обратной косой чертой.

Ответ №1:

Проблема не в том, что она закрывает системные диалоги…я провел плохую диагностику. Проблема в том, что это действие изменяет порядок задач, и всякий раз, когда оно приостанавливается, оно использует диспетчер действий и ставит себя на первое место. Таким образом, никакая другая активность не будет сверху). Я изменю другое действие так, чтобы оно «уважало» действия, выполняемые моей службой при вызове onPause. Итак, теперь я попытаюсь определить, какое именно действие вызвало паузу, и если оно исходит от сервиса, оно больше не будет пытаться быть на вершине.

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

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