编写微信聊天机器人8《聊天精灵WeChatGenius》:加入微信版本、是否root及安卓版本判断。

版权声明:允许转载,请注明来源。 https://blog.csdn.net/weixin_42127613/article/details/81869354

上篇,做了Xposed是否安装、以及是否激活的判断。

链接:https://blog.csdn.net/weixin_42127613/article/details/81868440

本节,加入更多环境检测,判断微信的版本以及是否安装,是否root,以及Android系统的版本。最终运行的效果,如下图所示。

本节要新增和修改的文件结构,如下图所示。绿色为新增,蓝色为修改。

1、新建版本支持类SupportVersion,用于存在系统能支持的版本号。只要当前的版本,在列表中,那边就支持。

public class SupportVersion {
    //微信支持的版本
    public static final String[] wechatSupport = {"6.6.7"};

    //安卓系统支持的版本
    public static final String[] androidSupport = {"8.1.1", "8.0.1", "7.1.1", "7.0.1", "6.0.1"};
    public static final int[] androidSdkSupport = {27, 26, 25, 24, 23};
}

2、新建ShellUtil类,用于执行ROOT指令,判断是否ROOT。不过此类的方法,在有些真机上执行时,有个缺陷。就是会弹出申请管理员权限的确认框,如果这个确认框没有弹出来,则有可能会一直卡在那里。

此类的代码,是网上找的,并非我写。就不贴出来了,比较长。

3、修改AppInfo类。

加入Android系统和微信版本相关的成员变量,并加入相应的检测方法。关键代码如下:

    //Android系统版本
    private String mAndroidVersionName;
    private boolean mIsDeviceRooted;   //设备是否ROOT
    private boolean mIsSupportAndroid;  //是否支持该版本Android
    //Xposed是否安装
    private boolean mIsXposedInstall;
    private String mXposedVersionName;
    //微信是否安装、版本号
    private boolean mIsWechatInstall;
    private String mWechatVersionName;
    private boolean mIsSupportWechat;

    //检测设备环境
    public void ValidateEnvironment(Context context) {
        //判断root
        mIsDeviceRooted = ShellUtil.checkRootPermission();
        //Android系统版本
        mAndroidVersionName = Build.VERSION.RELEASE;
        //判断微信
        mWechatVersionName = AppUtils.getAppVersionName(context, AppUtils.PACKAGE_NAME_WECHAT);
        mIsWechatInstall = !StringUtils.isEmpty(getWechatVersionName());
        //判断Xposed是否安装
        mXposedVersionName = AppUtils.getAppVersionName(context, AppUtils.PACKAGE_NAME_XPOSED);
        mIsXposedInstall = !StringUtils.isEmpty(getXposedVersionName());

        //检测安卓版本是否符合要求
        mIsSupportAndroid = isContainAndroidVersion();
        //判断微信版本是否符合要求
        mIsSupportWechat = mIsWechatInstall && isContainWechatVersion();
    }

    //获取微信版本是否包含在支持列表中
    private boolean isContainWechatVersion() {
        if (mWechatVersionName == null) {
            return false;
        }
        for (int i = 0; i < SupportVersion.wechatSupport.length; i++) {
            if (mWechatVersionName.equals(SupportVersion.wechatSupport[i])) {
                return true;
            }
        }
        return false;
    }

    //获取微信版本是否包含在支持列表中
    private boolean isContainAndroidVersion() {
        if (mAndroidVersionName == null) {
            return false;
        }
        for (int i = 0; i < SupportVersion.androidSupport.length; i++) {
            if (mAndroidVersionName.equals(SupportVersion.androidSupport[i])) {
                return true;
            }
        }
        return false;
    }

4、修改MainActivity,加入系统版本和微信版本的显示。

 //初始化QMUIGroupListView
    private void initMainContentView() {
        AppInfo appInfo = AppInfo.getInstance();
        boolean boolResult;
        String strResult;

        //region 系统版本与root状态
        //系统版本
        QMUICommonListItemView listItemSystem = mGroupListView.createItemView("系统版本");
        listItemSystem.setDetailText("Android V" + appInfo.getAndroidVersionName());
        boolResult = appInfo.isSupportAndroid();
        listItemSystem.setImageDrawable(ContextCompat.getDrawable(this, boolResult? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
        //是否已ROOT
        QMUICommonListItemView listItemRoot = mGroupListView.createItemView("是否ROOT");
        boolResult = appInfo.isDeviceRooted();
        strResult = boolResult ? "已ROOT" : "未ROOT";
        listItemRoot.setDetailText(strResult);
        listItemRoot.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
        QMUIGroupListView.newSection(this)
                .setTitle("系统状态")
                .addItemView(listItemSystem, null)
                .addItemView(listItemRoot, null)
                .addTo(mGroupListView);
        //endregion

        //region 微信版本状态
        //微信安装版本
        QMUICommonListItemView listItemWechatVersion = mGroupListView.createItemView("微信版本");
        boolResult = appInfo.isWechatInstall();
        listItemWechatVersion.setDetailText(boolResult ? "V" + appInfo.getWechatVersionName() : "未安装");
        boolResult = appInfo.isSupportWechat();
        listItemWechatVersion.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
        QMUIGroupListView.newSection(this)
                .setTitle("微信状态")
                .addItemView(listItemWechatVersion, null)
                .addTo(mGroupListView);
        //endregion

        //region Xposed框架状态
        //Xposed版本
        QMUICommonListItemView listItemXposed = mGroupListView.createItemView("Xposed版本");
        boolResult = appInfo.isXposedInstall();
        listItemXposed.setDetailText(boolResult ? "V" + appInfo.getXposedVersionName() : "未安装");
        listItemXposed.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
        //Xposed模块激活
        QMUICommonListItemView listItemXposedActive = mGroupListView.createItemView("Xposed模块激活");
        boolResult = appInfo.isXposedActive();
        listItemXposedActive.setDetailText(boolResult ? "已激活" : "未激活");
        listItemXposedActive.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
        QMUIGroupListView.newSection(this)
                .setTitle("Xposed框架状态")
                .addItemView(listItemXposed, null)
                .addItemView(listItemXposedActive, null)
                .addTo(mGroupListView);
        //endregion

    }

OK。完成这些修改,现在编译运行,看看效果。就是上图展示的效果啦。

这样 我们的软件是否能运行,就可以做一个简单的环境判断。

代码已提交GitHub:https://github.com/dalu2048/WeChatGenius

下篇,将引入网络请求包,获取网络数据。

链接:https://blog.csdn.net/weixin_42127613/article/details/81872403

猜你喜欢

转载自blog.csdn.net/weixin_42127613/article/details/81869354
今日推荐