判斷手機已安裝某程序的方法:
private boolean isAvilible(Context context, String packageName){ final PackageManager packageManager = context.getPackageManager();//獲取packagemanager List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//獲取所有已安裝程序的包信息 List<String> pName = new ArrayList<String>();//用於存儲所有已安裝程序的包名 //從pinfo中將包名字逐一取出,壓入pName list中 if(pinfo != null){ for(int i = 0; i < pinfo.size(); i++){ String pn = pinfo.get(i).packageName; pName.add(pn); } } return pName.contains(packageName);//判斷pName中是否有目標程序的包名,有TRUE,沒有FALSE }
判斷后的邏輯:
//已安裝,打開程序,需傳入參數包名:"com.tencent.mm" if(isAvilible(this, "com.skype.android.verizon")){ Intent i = new Intent(); ComponentName cn = new ComponentName("com.tencent.mm", "com.tencent.mm.WeiXinActivity"); i.setComponent(cn); startActivityForResult(i, RESULT_OK); } //未安裝,跳轉至market下載該程序 else { Uri uri = Uri.parse("market://details?id=com.tencent.mm");//id為包名
// 直接從指定網址下載
// Uri uri = Uri.parse("http://dldir1.qq.com/foxmail/weixin521android400.apk");
Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); }