项目跟进笔记7 ----aidl文件及系统隐藏方法的使用

1.根据关键字查询系统缓存的获取方法

这里写图片描述

  • Setting源码缓存获取的实现

    //创建了一个实现了IPackageStatsObserver.Stub借口的子类对象,并且实现了onGetStatsCompleted方法
    final IPackageStatsObserver.Stub mStatsObserver = new IPackageStatsObserver.Stub() {
    
        @Override
        public void onGetStatsCompleted(PackageStats pStats,
                boolean succeeded) throws RemoteException {
    
        }
    };
    
    mPm.getPackageSizeInfo(mCurComputingSizePkg, mStatsObserver);
    
  • 反射调用系统隐藏方法

    // 1.获取指定类的字节码文件
    try {
        Class<?> clazz = Class.forName("android.content.pm.PackageManager");
        // 2.获取调用方法对象
        Method method = clazz.getMethod("getPackageSizeInfo", String.class,
                IPackageStatsObserver.class);
        // 3.获取对象调用方法
        method.invoke(mPm, "com.android.browser", mStatsObserver);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

相关权限

<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>

所需文件(连个aidl文件)

 IPackageStatsObserver.aidl
 PackageStats.aidl

注意:使用使要把其放在android.content.pm包下

2.单个缓存的清理操作


一、单个缓存的清理,需要是系统应用

以上 权限系统应用无法获得

要想单个清理,调用系统清理缓存的activity,隐式意图开启清理界面,逐个清理
先关实例方法:

Intent intent = new Intent(
                                    "android.settings.APPLICATION_DETAILS_SETTINGS");
                            intent.setData(Uri.parse("package:"
                                    + info.packageName));
                            startActivity(intent);

二、 全部清理,权限

    <category android:name="android.intent.category.LAUNCHER" />
  • 所需aidl 文件

    IPackageDataObserver.aidl

相关实例方法:

    public void freeAche() {
        try {
            Class<?> clazz = Class.forName("android.content.pm.PackageManager");
            // 2.获取调用方法对象
            Method method = clazz.getMethod("freeStorageAndNotify", long.class,
                    IPackageDataObserver.class);
            // 3.获取对象调用方法
            method.invoke(mPm, Long.MAX_VALUE, new IPackageDataObserver.Stub() {
                @Override
                public void onRemoveCompleted(String packageName,
                        boolean succeeded) throws RemoteException {
                    // 清除缓存完成后调用的方法(考虑权限)
                    Message msg = Message.obtain();
                    msg.what = CACHE_CLEAN_FINISH;
                    mHandler.sendMessage(msg);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值