Android判斷手機是否安裝微信(總結)

網上有很多關於判斷方法,無外乎兩種:

一,通過判斷手機中安裝的應用的包名中,是否有符合微信的包名的。

二,通過集成微信的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;
        }
}



以上代碼在三星S7測試時,會先走SDK的判斷,因爲SDK的判斷始終返回FALSE,因此會走到包名的判斷,包名的判斷在S7上纔有用,如果手機上安裝了微信,則返回true, 否則返回false。


在華爲的某型號手機上(記不得了,測試時遇到過,印象很深,因爲最開始的方法就是判斷包名,在這款手機上就無效,後來改爲使用SDK的判斷方法實測有效), 判斷包名的方法無效,因此用以上方法判斷時,先走SDK的判斷方法,安裝了微信,則返回true,否則返回false。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章