जवाबों:
इसके साथ प्रयास करें:
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");
यह उत्तर दिखाता है कि यदि ऐप गायब है, तो ऐप को प्ले स्टोर से कैसे प्राप्त करें, हालांकि प्ले स्टोर में न होने वाले उपकरणों पर ध्यान रखने की आवश्यकता है।
उपरोक्त कोड मेरे लिए काम नहीं किया। निम्नलिखित दृष्टिकोण ने काम किया।
उपयुक्त जानकारी के साथ एक उद्देश्य ऑब्जेक्ट बनाएँ और फिर जाँचें कि क्या इंटेंट कॉल करने योग्य है या निम्न फ़ंक्शन का उपयोग नहीं कर रहा है:
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();
और अधिक जावा शैली के अनुकूल होगा
यह कोड यह सुनिश्चित करने के लिए जाँचता है कि ऐप इंस्टॉल है, लेकिन यह भी सुनिश्चित करने के लिए जाँच करता है कि यह सक्षम है या नहीं।
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;
}
}
मुझे लगता है कि कोशिश / कैच पैटर्न का उपयोग प्रदर्शन के लिए बहुत अच्छा नहीं है। मैं इसका उपयोग करने की सलाह देता हूं:
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 में स्थापित है या नहीं।
कोटलिन एक्सटेंशन बनाना।
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
}
इस कोड का उपयोग मौसम के अनुप्रयोग को पैकेज नाम के साथ स्थापित करने की जाँच करने के लिए किया जाता है या नहीं, यदि ऐसा नहीं है तो यह आपके ऐप के प्लेस्टोर लिंक को खोलेगा या आपके इंस्टॉल किए गए ऐप को
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 );
}
कोटलिन का उपयोग करके एक सरल कार्यान्वयन
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
और इसे इस तरह से कॉल करें (Spotify ऐप की मांग):
packageManager.isAppInstalled("com.spotify.music")
सभी उत्तर केवल यह निश्चित करते हैं कि कुछ ऐप इंस्टॉल किया गया है या नहीं। लेकिन, जैसा कि हम सभी जानते हैं कि एक ऐप इंस्टॉल किया जा सकता है लेकिन उपयोगकर्ता द्वारा अक्षम किया जा सकता है, अनुपयोगी है।
इसलिए, यह समाधान दोनों के लिए जाँच करता है। अर्थात्, स्थापित और सक्षम ऐप्स ।
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;
}