专栏名称: AirPython
分享 Python 自动化及爬虫、数据分析实战干货,欢迎关注。
目录
相关文章推荐
香港365天  ·  25Fall香港新生群来啦!新生手册送到! ·  昨天  
香港365天  ·  25Fall香港新生群来啦!新生手册送到! ·  昨天  
北美留学生观察  ·  EB5爆雷!绿卡没拿到手,百万资金也打了水漂... ·  昨天  
雷科技  ·  DeepSeek预测:25年国产手机品牌,哪 ... ·  2 天前  
51好读  ›  专栏  ›  AirPython

自动化篇 | 再也不用担心老人们用智能机了

AirPython  · 公众号  ·  · 2020-01-27 19:34

正文



点击上方“ AirPython ”,选择“置顶公众号”
第一时间获取 Python 技术干货!



阅读文本大概需要 8 分钟。


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

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

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

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


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         {
             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、 重启有效

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

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

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






请到「今天看啥」查看全文


推荐文章
苏米的星座馆  ·  来测一测,你的吸引之处
7 年前
每日一禅  ·  静的力量 (深度好文!)
7 年前
政知圈  ·  一个省5位常委一起出省
7 年前