判断Activity是否存在

一、根据包名判断应用是否存在

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(); // 自行关闭 } }

 

 

 

posted @ 2016-07-28 00:11  马骝  阅读(849)  评论(0编辑  收藏  举报