網上有很多關於判斷方法,無外乎兩種:
一,通過判斷手機中安裝的應用的包名中,是否有符合微信的包名的。
二,通過集成微信的SDK後,使用SDK裏的api方法進行判斷。
經測試都有問題,即單獨使用其中的一種方法都不能覆蓋所有機型。
如,使用微信SDK裏提供的判斷方法,在三星S7手機上始終返回false,不管你裝沒裝微信。
而使用包名的方法,則在華爲的某一款手機上也始終返回false, 不管你裝沒裝微信。
所以採用二者結合的方式,先使用SDK裏的方法判斷一下,如果返回false,則繼續使用判斷包名的方法,直接扔代碼如下:
private static IWXAPI api; // 相應的包,請集成SDK後自行引入 /** * 判斷微信客戶端是否存在 * * @return true安裝, false未安裝 */ public static boolean isWeChatAppInstalled(Context context) { api = WXAPIFactory.createWXAPI(context, "Your WeChat AppId"); if(api.isWXAppInstalled() && api.isWXAppSupportAPI()) { return true; } else { final PackageManager packageManager = context.getPackageManager();// 獲取packagemanager List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 獲取所有已安裝程序的包信息 if (pinfo != null) { for (int i = 0; i < pinfo.size(); i++) { String pn = pinfo.get(i).packageName; if (pn.equalsIgnoreCase("com.tencent.mm")) { return true; } } } return false; } }
在華爲的某型號手機上(記不得了,測試時遇到過,印象很深,因爲最開始的方法就是判斷包名,在這款手機上就無效,後來改爲使用SDK的判斷方法實測有效), 判斷包名的方法無效,因此用以上方法判斷時,先走SDK的判斷方法,安裝了微信,則返回true,否則返回false。