Ouvir os eventos do ATIVITALMANAGER?
-
20-09-2019 - |
Pergunta
De alguma forma, é possível ouvir os eventos do Manager de Atividade, por exemplo, quando as atividades são iniciadas? O ActivityManager envia transmissões? Eu não encontrei nada indicando que isso acontece.
O que eu basicamente preciso fazer: quero que meu aplicativo inicie uma das minhas atividades sempre que um determinado aplicativo (terceiro) é lançado/toma foco. O problema é que isso precisa acontecer antes que o aplicativo terceiro parte seja exibido.
O que eu tentei até as soluções alternativas:
- Saída do logcat: eu consulte o logcat a cada 0,8s (filtrado para mostrar apenas eventos de manager de atividades), mas isso consome muitos Ressources
- GetRunningTasks: diminui muito o telefone também e não é muito seguro, pois uma atividade pode estar funcionando, mas não está atualmente em foco
Alguma ideia?
Solução
Suponho que não existe realmente outra maneira herdada de lidar com o estado do sistema glabal, apenas
(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
AtividadeManager.GetRecentTasks () - Retorne uma lista das tarefas que estão em execução atualmente, com as mais recentes sendo as primeiras e mais antigas em ordem.
Para obter detalhes, verifique documentos
Talvez o Android seja um Linux, você pode executar ferramentas do sistema como
Runtime.getRuntime().exec("ps -aux | grep smth")
Mas acho que seria difícil detectar um aplicativo Java específico.
Outras dicas
Eu acho que você pode usar o modo de lançamento para determinar qual atividade ser lançada no nível superior. Por favor, verifique a pergunta: Modo de lançamento do Android SingleTask ou SingleInstance?. Talvez isso te ajude.
Eu dei uma olhada na fonte do Android, mas não parece haver eventos transmitidos.
https://android.googlesource.com/platform/packages/providers/applicationsprovider