下面介绍怎么判断手机已安装某程序的方法:
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager(); //获取packagemanager
List< packageInfo> packinfo = packageManager.getInstalledPackages(0); //获取所有已安装程序的包信息
List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pName list中
if(packinfo != null){
for(int i = 0; i < packinfo.size(); i++){
String pn = packinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判断pName中是否有目标程序的包名,有true,没有false
}
下面是调用该方法进行判断后的逻辑:
//已安装,打开程序,需传入参数包名eg:"com.zhoujp.packagedemo"
if(isAvilible(this, "com.skype.android.verizon")){
Intent intent = new Intent();
ComponentName cn = new ComponentName("com.zhoujp.packagedemo",
"com.zhoujp.packagedemo.MainActivity");
intent.setComponent(cn);
startActivityForResult(intent, RESULT_OK);
} else { //未安装,跳转至market下载该程序
Uri uri = Uri.parse("market://details?id=com.zhoujp.packagedemo");//id为包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
下面这两个函数要分别传入action和intent,大家可以试试。
方法一:
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
方法二:
public boolean isIntentAvailable(Intent intent) {
final PackageManager packageManager = this.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager(); //获取packagemanager
List< packageInfo> packinfo = packageManager.getInstalledPackages(0); //获取所有已安装程序的包信息
List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pName list中
if(packinfo != null){
for(int i = 0; i < packinfo.size(); i++){
String pn = packinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判断pName中是否有目标程序的包名,有true,没有false
}
下面是调用该方法进行判断后的逻辑:
//已安装,打开程序,需传入参数包名eg:"com.zhoujp.packagedemo"
if(isAvilible(this, "com.skype.android.verizon")){
Intent intent = new Intent();
ComponentName cn = new ComponentName("com.zhoujp.packagedemo",
"com.zhoujp.packagedemo.MainActivity");
intent.setComponent(cn);
startActivityForResult(intent, RESULT_OK);
} else { //未安装,跳转至market下载该程序
Uri uri = Uri.parse("market://details?id=com.zhoujp.packagedemo");//id为包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
下面这两个函数要分别传入action和intent,大家可以试试。
方法一:
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
方法二:
public boolean isIntentAvailable(Intent intent) {
final PackageManager packageManager = this.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
本文出自:教你怎么判断手机是否已安装某程序(转)
http://www.eoeandroid.com/thread-152763-1-1.html
(出处: eoe 移动开发者论坛)