Como obtenho um gerente de projeção de mídia sem atrapalhar o processo atual em primeiro plano, exceto para pedir permissão?
Problema: tenho um aplicativo de captura de tela que usa um serviço de sobreposição flutuante para controles e o API Media Project Manager da transmissão de tela para obter acesso à tela. Às vezes, quando um dispositivo está com pouca memória, o Android reinicia o serviço e eu perco minha projeção de mídia.
A única maneira que conheço de readquirir uma nova projeção de mídia é reabrir uma Atividade que solicite as permissões, e isso seria o fim dela, exceto por um problema. Certos aplicativos, principalmente jogos, parecem ouvir quando perdem o processo de primeiro plano, pausam ou são redefinidos. Isso é chato.
Aqui está o meu cenário ideal. O serviço é aberto, se o usuário selecionou "marcado, não me pergunte novamente" na caixa de diálogo de solicitação de permissão, ele obtém a projeção da mídia de uma maneira que não perturbe a atividade atual do primeiro plano.
Como obtenho um gerente de projeção de mídia sem atrapalhar o atual processo em primeiro plano?
Existe uma maneira de obter projeção de mídia de um serviço direto ou uma maneira de abrir atividades em segundo plano a partir de um serviço?
Atualmente, uso esse código em Activity para obter o gerenciador de projeção de mídia
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void getScreenShotPermission() {
if(isLollipopOrNewer) {
mediaProjectionManager = (MediaProjectionManager) getContext().getSystemService(MEDIA_PROJECTION_SERVICE);
startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), 1);
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
this.finish();
}
}
}