Android检查手机有没有安装某应用的方法
本文实例讲述了Android检查手机有没有安装某应用的方法。分享给大家供大家参考,具体如下:
手机用户尤其厌烦手动输入大量信息,在一个程序中可以调用其他程序或功能往往可以给用户更好的用户体验,让用户倍感亲切,所以程序间这样的整合可以促成多方软件协同工作的“共赢”局面。
那我们在我们自己的程序中调用其他程序时往往要检查手机有没有安装该软件后再做相应操作,如没有安装,用intent将用户引导至androidmarket去下载该程序,如已安装则打开该程序,并传入参数和调用其功能。
下面介绍怎么判断手机已安装某程序的方法:
privatebooleanisAvilible(Contextcontext,StringpackageName){
finalPackageManagerpackageManager=context.getPackageManager();//获取packagemanager
List<packageInfo>pinfo=packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息
List<String>pName=newArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pNamelist中
if(pinfo!=null){
for(inti=0;i<pinfo.size();i++){
Stringpn=pinfo.get(i).packageName;
pName.add(pn);
}
}
returnpName.contains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE
}
下面是调用该方法进行判断后的逻辑:
//已安装,打开程序,需传入参数包名:"com.skype.android.verizon"
if(isAvilible(this,"com.skype.android.verizon")){
Intenti=newIntent();
ComponentNamecn=newComponentName("com.skype.android.verizon",
"com.skype.android.verizon.SkypeActivity");
i.setComponent(cn);
startActivityForResult(i,RESULT_OK);
}
//未安装,跳转至market下载该程序
else{
Uriuri=Uri.parse("market://details?id=com.skype.android.verizon");//id为包名
Intentit=newIntent(Intent.ACTION_VIEW,uri);
startActivity(it);
}
上面方法是我自己写的,另外网上查了下下面这个方法,据说可以,但我用时有点问题,可能是我传入的参数有问题,下面这两个函数要分别传入action和intent,大家可以试试。
方法一:
publicstaticbooleanisIntentAvailable(Contextcontext,Stringaction){
finalPackageManagerpackageManager=context.getPackageManager();
finalIntentintent=newIntent(action);
List<ResolveInfo>list=
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
returnlist.size()>0;
}
方法二:
publicbooleanisIntentAvailable(Intentintent){
finalPackageManagerpackageManager=this.getPackageManager();
List<ResolveInfo>list=packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
returnlist.size()>0;
}
后再做相应操作,如没有安装,用intent将用户引导至androidmarket去下载该程序,如已安装则打开该程序,并传入参数和调用其功能。
下面介绍怎么判断手机已安装某程序的方法:
privatebooleanisAvilible(Contextcontext,StringpackageName){
finalPackageManagerpackageManager=context.getPackageManager();//获取packagemanager
List<packageInfo>pinfo=packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息
List<String>pName=newArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pNamelist中
if(pinfo!=null){
for(inti=0;i<pinfo.size();i++){
Stringpn=pinfo.get(i).packageName;
pName.add(pn);
}
}
returnpName.contains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE
}
下面是调用该方法进行判断后的逻辑:
//已安装,打开程序,需传入参数包名:"com.skype.android.verizon"
if(isAvilible(this,"com.skype.android.verizon")){
Intenti=newIntent();
ComponentNamecn=newComponentName("com.skype.android.verizon",
"com.skype.android.verizon.SkypeActivity");
i.setComponent(cn);
startActivityForResult(i,RESULT_OK);
}
//未安装,跳转至market下载该程序
else{
Uriuri=Uri.parse("market://details?id=com.skype.android.verizon");//id为包名
Intentit=newIntent(Intent.ACTION_VIEW,uri);
startActivity(it);
}
上面方法是我自己写的,另外网上查了下下面这个方法,据说可以,但我用时有点问题,可能是我传入的参数有问题,下面这两个函数要分别传入action和intent,大家可以试试。
方法一:
publicstaticbooleanisIntentAvailable(Contextcontext,Stringaction){
finalPackageManagerpackageManager=context.getPackageManager();
finalIntentintent=newIntent(action);
List<ResolveInfo>list=
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
returnlist.size()>0;
}
方法二:
publicbooleanisIntentAvailable(Intentintent){
finalPackageManagerpackageManager=this.getPackageManager();
List<ResolveInfo>list=packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
returnlist.size()>0;
}
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。