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:

  1. 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
  2. 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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top