উত্তর:
এটি দিয়ে চেষ্টা করুন:
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;
}
গৃহীত উত্তরের চেয়ে ক্লিনার সমাধান (চেষ্টা-ধরা ছাড়াই) ( অ্যান্ড্রয়েডরেট লাইব্রেরির উপর ভিত্তি করে ):
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;
}
কোটলিন ব্যবহার করে চেক অ্যাপ ইনস্টলড রয়েছে বা অ্যান্ড্রয়েডে নেই।
কোটলিন এক্সটেনশন তৈরি করা হচ্ছে।
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
এবং এটিকে কল করুন (স্পটিফাই অ্যাপটির সন্ধান করা):
packageManager.isAppInstalled("com.spotify.music")
কোজলিন বি-তে এজেনিয়ান হামুতু'র উত্তর-)
private fun isAppInstalled(context: Context, uri: String): Boolean {
val packageInfoList = context.packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES)
return packageInfoList.asSequence().filter { it?.packageName == uri }.any()
}
সমস্ত উত্তর কেবলমাত্র কিছু অ্যাপ্লিকেশন ইনস্টল করা আছে কিনা তা যাচাই করে। তবে, যেমনটি আমরা সবাই জানি যে একটি অ্যাপ্লিকেশন ইনস্টল করা যেতে পারে তবে ব্যবহারকারীর দ্বারা অক্ষম করা যায় unus
অতএব, এই সমাধান উভয়ের জন্য পরীক্ষা করে। অর্থাত্ ইনস্টলড এবং সক্ষম অ্যাপ্লিকেশন ।
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.re مهرباني" পার্থক্য করতে না চান!
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;
}