美文网首页android实用技术自动化测试
黑科技 | 这段自动化脚本, 再也不用担心老人们用智能机了

黑科技 | 这段自动化脚本, 再也不用担心老人们用智能机了

作者: AirPython | 来源:发表于2020-01-29 11:29 被阅读0次

    智能手机越来越普及了,不仅能满足老人需要的基础功能,还能给他们带来更多娱乐方式。

    相信大部分的人,现在给老人购买新机,都会优先购买智能手机。

    由于智能机操作的复杂性,很多老年人的手机使用一段时间之后,不知不觉间,下载了一大堆垃圾软件,内存占用越来越大,机器越用越卡。

    那有什么办法可以阻止用户下载垃圾软件,保证手机系统的纯净性呢?

    1、最佳方案

    起初,想到的方案是定时去卸载应用,如果是 Root 后的设备,可以利用 pm 命令去静默卸载,大部分非 Root 设备只能使用 Intent 可视化卸载,显得效率极其的低下。

    后来,想到一种最方便、稳定的方式,就是使用无障碍服务,阻止应用的安装。

    首先,新建一个无障碍服务。

    接着,对系统默认的应用安装界面进行页面分析,编写配置文件,设置 packageNames;需要注意的是,有些产商对应用安装界面进行了定制化,以原生、小米、魅族为例,packageNames 就需要指定多个。

    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
        android:accessibilityEventTypes="typeWindowStateChanged"
        android:accessibilityFeedbackType="feedbackGeneric"
        android:accessibilityFlags="flagDefault"
        android:canRetrieveWindowContent="true"
        android:description="@string/desc"
        android:notificationTimeout="100"
        android:packageNames="com.android.packageinstaller,com.miui.packageinstaller,com.android.packageinstaller/.FlymePackageInstallerActivity" />
    

    重写 onAccessibilityEvent() 函数,当页面发生变化,接受到事件的时候,立即执行全局返回操作。

    performGlobalAction(GLOBAL_ACTION_BACK);
    

    2、 应用商店

    一般来说,系统内置的应用商店默认是静默快速安装,不会出现应用安 装界面,所以上面的阻止安装操作会失效。

    事实上,下载垃圾软件的场景大部分来自于一些新闻视频类 App,被诱导点击操作导致。并且,应用商品 App 提供了一个入口,方便我们安装其他应用等,比如:微信、抖音等。

    3、 应用过滤进阶

    步骤 1 默认会阻止所有的非应用市场 App 的安装,为了保证功能的完整性,需要自定义过滤的应用。

    首先,可以编写一个应用列表界面,用来展示所有的第三方应用App,拿到他们的应用名称、应用包名、应用图标。

    选择需要过滤的应用,检测到系统安装界面事件的时候,通过界面的元素 ID 拿到待安装应用的名称 ,如果包含在过滤列表数据中,则正常安装操作;否则,阻止应用安装。

    这部分涉及的内容过于复杂,所以不展开说明,对细节有兴趣的可以参考文末的完整源码。

    private void processAccessibilityEnvent(AccessibilityEvent event)
    {
        String[] phoneAttrs = AppUtil.getPhoneAttrs();
    
        if (event.getSource() != null && TextUtils.equals(event.getClassName(), phoneAttrs[0]))
        {
    
            try
            {
                Thread.sleep(3000);
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
    
    
            //获取应用名称
            String app_name = findViewContentByID(phoneAttrs[1]);
    
            Log.d("xag", "app_name:" + app_name);
    
            //是否存在保留应用中
            boolean isExist = false;
            if (selectedApps != null && 0 < selectedApps.size())
            {
                 for (AppBean appBean : selectedApps)
                 {
                      if (TextUtils.equals(appBean.getApp_name(), app_name))
                        {
                            isExist = true;
                        }
                    }
                }
            //如果不在保留应用列表,就不容许安装
            if (!isExist)
            {
                Log.d("xag", "不在保留应用列表,不容许安装!");
                performBackClick();
            } else
            {
                Log.d("xag", "在保留应用列表,容许安装!");
            }
        }
    }
    

    4、 重启有效

    为了保证无障碍服务能一直运行,特别是针对系统重启。

    针对低版本设备,重启设备之后,无障碍服务会自动运行。

    高版本的设备,需要手动打开应用自启开关。

    如果是魅族手机,需要利用手机管家 App 为应用设置应用权限为:容许后台运行。

    5、 其他说明

    上面这个服务首次安装需要进入无障碍服务中手动开启。

    我已经将全部源码上传到公众号后台,关注公众号「 AirPython 」后回复「 老人 」即可获得全部源码。

    如果是小米手机,可以直接回复「 小米手机 」获取 APK 直接体验。

    如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

    推荐阅读

    Python 帮你批量生成手机号码

    短视频篇 | Python 带你进行短视频二次创作

    Python 还你一块纯洁无暇的移动硬盘

    相关文章

      网友评论

        本文标题:黑科技 | 这段自动化脚本, 再也不用担心老人们用智能机了

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