Instalamos aplicativos programaticamente.
- Se o aplicativo já estiver instalado no dispositivo, ele será aberto automaticamente.
- Caso contrário, instale o aplicativo específico.
Guie-me. Eu não faço ideia. Obrigado.
Instalamos aplicativos programaticamente.
Guie-me. Eu não faço ideia. Obrigado.
Respostas:
Tente com isto:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add respective layout
setContentView(R.layout.main_activity);
// Use package name which we want to check
boolean isAppInstalled = appInstalledOrNot("com.check.application");
if(isAppInstalled) {
//This intent will help you to launch if the package is already installed
Intent LaunchIntent = getPackageManager()
.getLaunchIntentForPackage("com.check.application");
startActivity(LaunchIntent);
Log.i("Application is already installed.");
} else {
// Do whatever we want to do if application not installed
// For example, Redirect to play store
Log.i("Application is not currently installed.");
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
}
return false;
}
}
Solução um pouco mais limpa que a resposta aceita (com base nesta pergunta ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Eu escolhi colocá-lo em uma classe auxiliar como um utilitário estático. Exemplo de uso:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Esta resposta mostra como obter o aplicativo da Play Store, se o aplicativo estiver ausente, embora seja necessário tomar cuidado em dispositivos que não possuem a Play Store.
O código acima não funcionou para mim. A seguinte abordagem funcionou.
Crie um objeto Intent com informações apropriadas e verifique se o Intent pode ser chamado ou não usando a seguinte função:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
declarações! Definitivamente, esta é a resposta certa
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Se você souber o nome do pacote, isso funcionará sem o uso de um bloco try-catch ou a iteração de vários pacotes:
public static boolean isPackageInstalled(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
if (intent == null) {
return false;
}
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return !list.isEmpty();
}
return !list.isEmpty();
seria mais estilo java amigável
Esse código verifica se o aplicativo está instalado, mas também para garantir que ele esteja ativado.
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return pm.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}
Eu acho que usar o padrão try / catch não é muito bom para o desempenho. Eu aconselho a usar isso:
public static boolean appInstalledOrNot(Context context, String uri) {
PackageManager pm = context.getPackageManager();
List<PackageInfo> packageInfoList = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
if (packageInfoList != null) {
for (PackageInfo packageInfo : packageInfoList) {
String packageName = packageInfo.packageName;
if (packageName != null && packageName.equals(uri)) {
return true;
}
}
}
return false;
}
Solução mais limpa (sem tentativa de captura) do que a resposta aceita (com base na AndroidRate Library ):
public static boolean isPackageExists(@NonNull final Context context, @NonNull final String targetPackage) {
List<ApplicationInfo> packages = context.getPackageManager().getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if (targetPackage.equals(packageInfo.packageName)) {
return true;
}
}
return false;
}
O aplicativo Check está instalado ou não no Android usando o kotlin.
Criando extensão kotlin.
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
Agora, pode verificar se o aplicativo está instalado ou não
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
Este código é usado para verificar se seu aplicativo com o nome do pacote está instalado ou não, caso contrário, ele abrirá o link playstore do seu aplicativo, caso contrário, o aplicativo instalado
String your_apppackagename="com.app.testing";
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo = null;
try {
applicationInfo = packageManager.getApplicationInfo(your_apppackagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (applicationInfo == null) {
// not installed it will open your app directly on playstore
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + your_apppackagename)));
} else {
// Installed
Intent LaunchIntent = packageManager.getLaunchIntentForPackage(your_apppackagename);
startActivity( LaunchIntent );
}
Uma implementação mais simples usando Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
E chame assim (procurando pelo aplicativo Spotify):
packageManager.isAppInstalled("com.spotify.music")
Resposta de @Egemen Hamutçu em kotlin B-)
private fun isAppInstalled(context: Context, uri: String): Boolean {
val packageInfoList = context.packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES)
return packageInfoList.asSequence().filter { it?.packageName == uri }.any()
}
Todas as respostas apenas verificam se determinado aplicativo está instalado ou não. Mas, como todos sabemos, um aplicativo pode ser instalado, mas desativado pelo usuário, inutilizável.
Portanto, esta solução verifica os dois. ou seja, aplicativos AND habilitados e instalados .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Chame o método isPackageInstalled()
:
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Agora, use a variável booleana isAppInstalled
e faça o que quiser.
if(isAppInstalled ) {
/* do whatever you want */
}
Uma resposta legal para outros problemas. Se você não deseja diferenciar "com.myapp.debug" e "com.myapp.release", por exemplo!
public static boolean isAppInstalled(final Context context, final String packageName) {
final List<ApplicationInfo> appsInfo = context.getPackageManager().getInstalledApplications(0);
for (final ApplicationInfo appInfo : appsInfo) {
if (appInfo.packageName.contains(packageName)) return true;
}
return false;
}