Uygulamaları programlı olarak yükledik.
- Uygulama cihaza zaten yüklüyse, uygulama otomatik olarak açılır.
- Aksi takdirde ilgili uygulamayı yükleyin.
Beni yönlendir. Hiç bir fikrim yok. Teşekkürler.
Uygulamaları programlı olarak yükledik.
Beni yönlendir. Hiç bir fikrim yok. Teşekkürler.
Yanıtlar:
Şunu deneyin:
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;
}
}
Kabul edilen cevaptan biraz daha temiz bir çözüm ( bu soruya dayanarak ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Statik bir yardımcı program olarak yardımcı bir sınıfa koymayı seçtim. Kullanım örneği:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Bu cevap , uygulama eksikse uygulamanın Play Store'dan nasıl alınacağını gösterir, ancak Play Store'a sahip olmayan cihazlara dikkat edilmelidir.
Yukarıdaki kod benim için çalışmadı. Aşağıdaki yaklaşım işe yaradı.
Uygun bilgileri içeren bir Intent nesnesi oluşturun ve ardından Intent'in aşağıdaki işlevi kullanarak çağrılabilir olup olmadığını kontrol edin:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if! Bu kesinlikle doğru cevap
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Paket adını biliyorsanız, bu bir try-catch bloğu kullanmadan veya bir grup paket üzerinden yineleme yapmadan çalışır:
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();daha fazla java tarzı dostu olurdu
Bu kod, uygulamanın yüklendiğinden emin olmakla birlikte etkinleştirildiğinden emin olur.
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;
}
}
Deneme / yakalama desenini kullanmak performans için çok iyi değil. Bunu kullanmanızı tavsiye ederim:
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;
}
Kabul edilen yanıttan daha temiz bir çözüm (try-catch olmadan) ( AndroidRate Library'ye dayanarak ):
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;
}
Check App kotlin kullanarak Android yüklü veya yüklü değil.
Kotlin uzantısı oluşturma.
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
Şimdi, uygulamanın yüklenip yüklenmediğini kontrol edebilir
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
Bu kod, paket adıyla uygulamanızın hava durumunu kontrol etmek için kullanılır veya değilse, uygulamanızın playstore bağlantısını açar, aksi takdirde yüklü uygulamanız
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 kullanarak daha basit bir uygulama
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
Ve şöyle deyin (Spotify uygulaması arıyor):
packageManager.isAppInstalled("com.spotify.music")
@Egemen Hamutçu'nun kotlin'deki cevabı 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()
}
Tüm cevaplar sadece belirli uygulamanın yüklü olup olmadığını kontrol eder. Ancak, hepimizin bildiği gibi, bir uygulama kullanıcı tarafından yüklenebilir ancak devre dışı bırakılabilir, kullanılamaz.
Bu nedenle, bu çözüm her ikisini de kontrol eder. ör. yüklü VE etkin uygulamalar .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Yöntemi çağırın isPackageInstalled():
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Şimdi, boolean değişkenini kullanın ve isAppInstalledistediğinizi yapın.
if(isAppInstalled ) {
/* do whatever you want */
}
Diğer sorunlara harika bir cevap. Örneğin "com.myapp.debug" ve "com.myapp.release" ifadelerini birbirinden ayırmak istemiyorsanız!
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;
}