Abbiamo installato le applicazioni a livello di codice.
- Se l'applicazione è già installata nel dispositivo, l'applicazione si apre automaticamente.
- Altrimenti installa l'applicazione particolare.
Guidami. Non ne ho idea. Grazie.
Abbiamo installato le applicazioni a livello di codice.
Guidami. Non ne ho idea. Grazie.
Risposte:
Prova con questo:
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;
}
}
Soluzione un po 'più pulita della risposta accettata (basata su questa domanda ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Ho scelto di inserirlo in una classe di supporto come utility statica. Esempio di utilizzo:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Questa risposta mostra come ottenere l'app dal Play Store se l'app è mancante, anche se è necessario prestare attenzione sui dispositivi che non dispongono del Play Store.
Il codice sopra non ha funzionato per me. Il seguente approccio ha funzionato.
Creare un oggetto Intent con le informazioni appropriate e quindi verificare se Intent è richiamabile o non utilizza la seguente funzione:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
dichiarazioni! Questa è sicuramente la risposta giusta
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Se conosci il nome del pacchetto, questo funziona senza usare un blocco try-catch o iterando attraverso un mucchio di pacchetti:
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();
sarebbe più amichevole in stile java
Questo codice verifica che l'app sia installata, ma verifica anche che sia abilitata.
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;
}
}
Penso che usare il modello try / catch non sia molto buono per le prestazioni. Consiglio di usare questo:
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;
}
Soluzione più pulita (senza try-catch) rispetto alla risposta accettata (basata su 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;
}
Controlla che l'app sia installata o meno in Android usando kotlin.
Creazione dell'estensione kotlin.
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
Ora, posso verificare se l'app è installata o meno
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
Questo codice viene utilizzato per verificare se la tua applicazione con il nome del pacchetto è installata o meno, in caso contrario aprirà il link playstore della tua app, altrimenti l'app installata
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 );
}
Un'implementazione più semplice con Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
E chiamalo così (cercando l'app Spotify):
packageManager.isAppInstalled("com.spotify.music")
Tutte le risposte verificano solo che determinate app siano installate o meno. Ma, come tutti sappiamo, un'app può essere installata ma disabilitata dall'utente, inutilizzabile.
Pertanto, questa soluzione controlla entrambi. ovvero app installate e abilitate .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Chiama il metodo isPackageInstalled()
:
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Ora usa la variabile booleana isAppInstalled
e fai quello che vuoi.
if(isAppInstalled ) {
/* do whatever you want */
}
Una bella risposta ad altri problemi. Se non vuoi differenziare "com.myapp.debug" e "com.myapp.release" per esempio!
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;
}