Android开发经验(防怼经验)分享

作者: 代码打志bin | 来源:发表于2018-04-19 17:56 被阅读196次

    场景

    在公司做开发的时候,手头上有几台测试机 ,这时候测试随便拿了一台去测,点来点去crash了。然后跑来怼~。其实测试拿过去的手机跑的代码不是最新的,但是最最新代码无法重现bug,你也没改过对应的代码。这时候你不知道你不知道出bug的版本是哪个,无法git回到对应的版本查看bug。也或者是由于Android版本差异性导致的,测试不能马上告知你手机Android版本。

    解决方法

    在app种显示一个全局的视图,把apk最后更新的时间,版本等等信息展示出来,这样可以初步定位到问题。

    效果图

    demo

    实现方式

    这个其实不难,主要的关键词是“全局”,这里用到了WindowManager。
    自定义View继承Textview,然后将view通过添加到WindowManager中
    关键代码如下

        /**
         * 显示app信息文字
         * show info text
         * @param context 上下文
         */
        private void showInfoText(Context context)
        {
            windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            // 布局设置
            layoutParams = new WindowManager.LayoutParams();
            // 设置window type
            layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
            // 设置背景透明
            layoutParams.format = PixelFormat.RGBA_8888;
            // 设置显示的位置
            layoutParams.gravity = Gravity.RIGHT | Gravity.TOP;
            // 设置Window flag 不可触摸无焦点
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
            // 设置视图大小
            layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
            layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
            // 添加视图
            windowManager.addView(this, layoutParams);
        }
    

    显示的文字

    /**
         * 获取app信息
         * get info
         * @param context
         * @return
         */
        public String getDevInfo(Context context)
        {
            StringBuilder info = new StringBuilder();
            PackageManager packageManager = context.getPackageManager();
            try
            {
                PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
                // app最后更新时间
                long lastUpdateTime = packageInfo.lastUpdateTime;
                CharSequence relativeTimeSpanString = DateUtils.getRelativeTimeSpanString(lastUpdateTime);
                info.append("LastUpdate:").append(relativeTimeSpanString).append("\n");
                // app版本
                String versionName = packageInfo.versionName;
                info.append("Version:").append(versionName).append("\n");
                // api的host
                info.append("Host:").append(Constants.HOST).append("\n");
                // 测试机android版本
                info.append("Android:").append(Build.VERSION.RELEASE).append("\n");
            } catch (PackageManager.NameNotFoundException e)
            {
                e.printStackTrace();
            }
            return info.toString();
        }
    
    • LastUpdate:最后更新时间,可以知道代码是否是最新的
    • Version:版本号,可以知道bug在哪个版本产生的
    • Android:测试机Android版本,可以知道bug是否由版本差异性而产生(例如:6.0动态权限)
    • Host:接口的baseUrl,用于分辨是测试环境还是线上环境
      其他的信息可以根据需求添加删除

    用法

    1. 拷贝TextView4Dev到你的项目中
    2. 在MainActivity中实例化TextView4Dev textView4Dev = new TextView4Dev(this);
    3. 添加权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

    注意事项:需要获取权限ACTION_MANAGE_OVERLAY_PERMISSION

    完整代码请查看demo->GitHub,如果对您有用的话,请star一下,感激不尽~

    相关文章

      网友评论

      本文标题:Android开发经验(防怼经验)分享

      本文链接:https://www.haomeiwen.com/subject/aktbkftx.html