您的位置:首页 > 其它

判断Activity是否存在

2016-07-28 00:11 387 查看
一、根据包名判断应用是否存在

publicbooleancheckApplication(StringpackageName){

if(packageName==null||"".equals(packageName)){

returnfalse;

}

try{

ApplicationInfoinfo=getPackageManager().getApplicationInfo(packageName,PackageManager.GET_UNINSTALLED_PACKAGES);

returntrue;

}catch(NameNotFoundExceptione){

returnfalse;

}

}

二、判断Activity是否存在

Intentintent=newIntent();

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

}

protectedvoidstartAndExit(){
logi(TAG,"---startAndExit---");
Intentintent=newIntent(this,ActivityMain.class);
ComponentNamecmpName=intent.resolveActivity(getPackageManager());
booleanbIsExist=false;
if(cmpName!=null){//说明系统中存在这个activity
ActivityManageram=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo>taskInfoList=am.getRunningTasks(10);
logi(TAG,"---startAndExit---taskInfoList.size:"+taskInfoList.size());
for(RunningTaskInfotaskInfo: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
protectedvoidonNewIntent(Intentintent){
logi(TAG,"---onNewIntent---");
super.onNewIntent(intent);
if(intent.getBooleanExtra("isExit",false)){
finish();//自行关闭
}
}





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: