Normalmente, se eu tiver que instalar um apk (digamos, do cartão SD), preciso ativar "Fontes desconhecidas" nas configurações do meu telefone. Porém, quando transfiro e instalo qualquer APK de outro telefone usando o "ShareIt", essa permissão não é exigida pelo meu telefone.
Como o ShareIt pode ignorar essa permissão?
Respostas:
Pesquisei um pouco e é possível sem as permissões do sistema da API 21 em diante https://developer.android.com/reference/android/content/pm/PackageInstaller.html .
De fato, há um exemplo de código do Google que mostra como fazê-lo. https://github.com/googlesamples/android-testdpc/blob/master/app/src/main/java/com/afwsamples/testdpc/cosu/CosuUtils.java
fonte
Se os aplicativos forem instalados silenciosamente (sem a caixa de diálogo de instalação usual), presumivelmente, esses aplicativos serão chamados diretamente
pm
, ou sejaPackageManager
, que como aplicativo do sistema tem a permissãoandroid.permission.INSTALL_PACKAGES
.O telefone precisa estar enraizado para que o aplicativo possa chamar
pm
em um contexto raiz; caso contrário, você será recebido com a mensagem "Nem o usuário xxxx nem o processo atual tem android.permission.INSTALL_PACKAGES".EDIT: Como o @Izzy apontou no comentário,
android.permission.INSTALL_PACKAGES
também é concedido aos aplicativos instalados no/system
. Veja o comentário abaixo e esta pergunta para mais informações.fonte