Estou tentando instalar aplicativos do Google Play. Posso entender que ao abrir o URL da Google Play Store, ele abre o Google Play e quando pressiono o botão Voltar, a atividade é retomada.
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(marketIntent);
Quando voltei para a atividade, tentei chamar isso onResume()
para verificar se o aplicativo está instalado, mas recebo um erro:
@Override
protected void onResume() {
super.onResume();
boolean installed = false;
while (!installed) {
installed = appInstalledOrNot(APPPACKAGE);
if (installed) {
Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show();
}
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
O erro é o seguinte:
E / AndroidRuntime (796): java.lang.RuntimeException: Não foi possível iniciar a atividade ComponentInfo {com.example.appinstaller / com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: Nenhuma atividade encontrada para manipular o Intent {act = android .intent.action.VIEW dat = market: // details? id = com.package.name flg = 0x40080000}
Eu acho que a atividade é onPause()
. Existe uma maneira melhor de implementá-lo? Estou tentando verificar se a instalação do aplicativo foi concluída.
fonte
Respostas:
Experimente isto:
Ele tenta buscar informações sobre o pacote cujo nome você passou. Caso contrário, se um
NameNotFoundException
foi lançado, significa que nenhum pacote com esse nome está instalado, então retornamosfalse
.Observe que passamos a em
PackageManager
vez de aContext
, de modo que o método seja um pouco mais flexível e não viole a lei de Demeter . Você pode usar o método sem acesso a umaContext
instância, desde que tenha umaPackageManager
instância.Use-o assim:
fonte
A resposta de Robin Kanters está certa, mas verifica se há aplicativos instalados independentemente de seu estado ativado ou desativado.
Todos nós sabemos que um aplicativo pode ser instalado, mas desabilitado pelo usuário, portanto, inutilizável.
Isso verifica se há aplicativos instalados E habilitados:
Você pode colocar esse método em uma classe como
Utils
e chamá-lo em qualquer lugar usando:fonte
Experimente isto:
fonte
Solução mais rápida:
getPackageGids
é mais barato dogetPackageInfo
, por isso funciona mais rápido.Nota: Isso não funcionará em alguns espaços virtuais. Eles podem violar a API do Android e sempre retornar uma matriz, mesmo se não houver nenhum aplicativo com esse nome de pacote.
Nesse caso, use
getPackageInfo
.fonte
fonte
// método para verificar o pacote instalado verdadeiro / falso
fonte
Se você quiser tentar sem o bloco try catch, pode usar o seguinte método, Criar um intent e definir o pacote do aplicativo que você deseja verificar
e chame o seguinte método para verificar se o aplicativo está instalado
fonte
Aqueles que procuram uma solução Kotlin podem usar este método,
Aqui eu compartilhei o código completo e também lidei com o status ativado. Verifique se o aplicativo está instalado no Android Kotlin
fonte
fonte