一、根据包名判断应用是否存在
public boolean checkApplication(String packageName) {
if (packageName == null || "".equals(packageName)){
return false;
}
try {
ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
二、判断Activity是否存在
Intent intent = new Intent();
intent.setClassName("包名", "类名");
方法一:
if (getPackageManager().resolveActivity(intent, 0) == null) {
// 说明系统中不存在这个activity
}
方法二:
if(intent.resolveActivity(getPackageManager()) == null) {
// 说明系统中不存在这个activity
}
方法三:
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
if (list.size() == 0) {
// 说明系统中不存在这个activity
}
protected void startAndExit() { logi(TAG, "---startAndExit---"); Intent intent = new Intent(this, ActivityMain.class); ComponentName cmpName = intent.resolveActivity(getPackageManager()); boolean bIsExist = false; if (cmpName != null) { // 说明系统中存在这个activity ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<RunningTaskInfo> taskInfoList = am.getRunningTasks(10); logi(TAG, "---startAndExit---taskInfoList.size:" + taskInfoList.size()); for (RunningTaskInfo taskInfo : taskInfoList) { LogUtils.logi(TAG, "---startAndExit---taskInfo:" + taskInfo.baseActivity); if (taskInfo.baseActivity.equals(cmpName)) { // 说明它已经启动了 bIsExist = true; break; } } } logi(TAG, "---onStartAndExit---bIsExist:" + bIsExist); if (bIsExist) { intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("isExit", (Boolean) true); //让它自行关闭 this.startActivity(intent); } }
如果某个Activity的运行模式被设置为singleTask或singleInstance,再次启动它,会触发它的onNewIntent方法。
@Override protected void onNewIntent(Intent intent) { logi(TAG, "---onNewIntent---"); super.onNewIntent(intent); if (intent.getBooleanExtra("isExit", false)) { finish(); // 自行关闭 } }