Tente FLAG_SECURE
:
public class FlagSecureTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.main);
}
}
Isso definitivamente protege contra capturas de tela manuais e capturas de tela automáticas do histórico de tarefas recentes do ICS. Também protege contra gravação de tela (por exemplo, aplicativos que usam as APIs de projeção de mídia).
UPDATE : também protege contra o Now On Tap ou outros assistentes no Android 6.0; eles não terão acesso aos detalhes de widgets e contêineres na sua interface do usuário se o usuário chamar o assistente.
ATUALIZAÇÃO # 2 : no entanto, nem tudo na atividade será protegido. Todas as janelas pop-up - Dialog
, Spinner
, AutoCompleteTextView
, ação bar estouro, etc. - vai ser inseguro. Você pode corrigir o Dialog
problema chamando getWindow()
-o e definindo FLAG_SECURE
. O resto ... fica complicado. Veja esta postagem do blog para obter mais informações.
FLAG_SECURE
existe desde o início - só tinha um significado limitado até recentemente.FLAG_SECURE
não se defenderá disso, pois é um nível muito baixo. Da mesma forma, se você adotou sua própria hierarquia de widgets e aBitmap
chamou para um back - backCanvas
,FLAG_SECURE
provavelmente não se defenderá disso, pois você está fazendo suas próprias capturas de tela de seus widgets e, portanto, presumivelmente queria as "seguras" lá.FLAG_SECURE
é para capturas de tela do sistema , como as miniaturas de tarefas recentes.Cuidado ao usar o WindowManager.LayoutParams.FLAG_SECURE, em alguns dispositivos (verificado no Samsung Galaxy ACE, por exemplo, GT-S5830), isso fará com que a exibição seja embaralhada. Parece um bug específico da Samsung. Eu recomendo o seguinte:
É assim que uma tela embaralhada se parece:
Porém, ele está funcionando corretamente nos telefones ICS Samsung, então estou assumindo que o problema está isolado nos dispositivos Gingerbread (ou mais antigos).
fonte
A solução fornecida pelo CommonsWare continua válida também no Lollipop.
Apenas uma observação, se você quiser continuar a não ver instantâneos na lista recente de todo o aplicativo, TODAS as atividades implementadas devem especificar no
onCreate()
método o sinalizadorgetWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
antessetContentView();
Caso contrário, um instantâneo na lista recente mostrará a primeira atividade sem o sinalizador se o usuário navegar nele.
fonte
Aqui está uma solução para ocultar o conteúdo de um aplicativo, cobrindo-o com uma tela inicial quando o aplicativo é colocado em segundo plano. Isso não está usando a técnica FLAG_SECURE, simplesmente substituo os métodos onPause e onResume das telas e modifico a visualização para mostrar uma que cubra tudo na parte de trás.
https://stackoverflow.com/a/52976001/6686912
fonte
isso funcionou para mim, impede a captura de tela e também qualquer aplicativo de gravação embutido ou de terceiros na tela de gravação.
fonte
Isso é um trabalho para mim depois de adicionar essas linhas ao onCreate antes de setContentView de cada atividade.
fonte