Ми встановили програми програмно.
- Якщо програма вже встановлена на пристрої, програма відкриється автоматично.
- В іншому випадку встановіть конкретну програму.
Веди мене. Я поняття не маю. Дякую.
Ми встановили програми програмно.
Веди мене. Я поняття не маю. Дякую.
Відповіді:
Спробуйте з цим:
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;
}
}
Дещо більш чисте рішення, ніж прийнята відповідь (виходячи з цього питання ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Я вирішив поставити його в хелперний клас як статичну утиліту. Приклад використання:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Ця відповідь показує, як отримати додаток із Play Store, якщо його немає, хоча потрібно бути обережним на пристроях, у яких немає Play Store.
Наведений вище код не працював для мене. Наступний підхід спрацював.
Створіть об'єкт наміру з відповідною інформацією, а потім перевірте, чи має намір дзвонити або не використовуючи таку функцію:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
заяви! Це, безумовно, правильна відповідь
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Якщо ви знаєте назву пакета, це працює, не використовуючи блок-пробування чи повторення через купу пакетів:
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();
буде більш привітним у стилі java
Цей код перевіряє, щоб переконатися, що додаток встановлено, але також перевіряє його активність.
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;
}
}
Я думаю, що використання моделі try / catch не дуже добре для продуктивності. Раджу скористатися цим:
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;
}
Більш чисте рішення (без спроб), ніж прийнята відповідь (заснована на бібліотеці AndroidRate ):
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;
}
Перевірте, чи додаток встановлено чи не в Android, використовуючи kotlin.
Створення розширення kotlin.
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
Тепер можна перевірити, встановлено чи ні додаток
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
Цей код використовується для перевірки встановлення погоди, коли ваша програма із назвою пакета встановлена чи ні, якщо ні, то вона відкриє посилання playstore для вашої програми, інакше ваш встановлений додаток
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 );
}
Простіша реалізація за допомогою Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
І називайте це так (шукаючи додаток Spotify):
packageManager.isAppInstalled("com.spotify.music")
Відповідь @Egemen Hamutçu в 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()
}
Усі відповіді лише перевіряють, встановлений чи не встановлений додаток. Але, як ми всі знаємо, додаток можна встановити, але користувачем відключити, непридатним.
Тому це рішення перевіряє обидва. тобто встановлені програми з підтримкою AND .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Викличте метод isPackageInstalled()
:
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Тепер використовуйте булеву змінну isAppInstalled
і робіть все, що завгодно.
if(isAppInstalled ) {
/* do whatever you want */
}
Класна відповідь на інші проблеми. Якщо ви не хочете, наприклад, розмежовувати "com.myapp.debug" та "com.myapp.release"!
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;
}