ما برنامه های کاربردی را نصب کرده ایم .
1. اگر برنامه در دستگاه نصب شده باشد ، برنامه به طور خودکار باز است .
2. در غیر این صورت برنامه خاصی را نصب کنیم .
پاسخ 1 :
این کد را امتحان کنید :
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
IntentLaunchIntent = 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;
}
}
پاسخ 2 :
public static boolean isAppInstalled(Context context,String packageName){
try{
context.getPackageManager().getApplicationInfo(packageName,0);
return true;
}
catch(PackageManager.NameNotFoundException e){
returnfalse;
}
}
من تصمیم گرفتم آنرا در یک کلاس کمکی به عنوان یک ابزار استاتیک وارد کنم .
نمونه کد :
boolean whatsappFound = AndroidUtils.isAppInstalled(context,"com.whatsapp");
این پاسخ نشان می دهد که چگونه برنامه را از فروشگاه گوگل پلی در صورتی که برنامه از دست رفته باشد ، دریافت می کند . همچنین مراقب دستگاه هایی که Play Store ندارند باشید .
پاسخ 3 :
کد زیر می تواند کاربردی باشد .
یک شی Intent با اطلاعات مناسب ایجاد کنید و بررسی کنید که آیا Intent قابل فراخوانی است یا از متد زیر استفاده نمی کند :
private boolean isCallable(Intent intent){
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size()>0;
}
پاسخ 4 :
اگر نام پکیج را می دانید ، این کار بدون استفاده از بلوک try-catch یا تکرار از طریق یک دسته از پکیج ها انجام می شود :
public static boolean isPackageInstalled(Context context,String packageName){
final PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
if(intent ==null){
returnfalse;
}
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
return list.size()>0;
}
پاسخ 5 :
این کد برای اطمینان از اینکه برنامه نصب شده را بررسی می کند، همچنین بررسی می کند تا مطمئن شود که آن فعال شده است :
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;
}
}
پاسخ 6 : من فکر می کنم که استفاده از بلوک 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;
}