IPackageStatsObserver无法解析为某个类型(Android)

Viv*_*rde 5 java sdk android

我想用这个设备计算所有缓存的总和.为此,我得到一个编译时间错误:

IPackageStatsObserver cannot be resolved to a type
Run Code Online (Sandbox Code Playgroud)

我在代码中提到了这个错误2次:

public long totalCacheSize(){
    totalSize=0;

    PackageManager packageManager = getApplicationContext().getPackageManager();

     /* List<PackageInfo> packs = packageManager
      .getInstalledPackages(PackageManager.GET_ACTIVITIES);*/
     // PackageManager.GET_META_DATA

    List<PackageInfo> packs = packageManager
            .getInstalledPackages(PackageManager.GET_META_DATA);

    for (int i = 0; i < packs.size(); i++) {

        PackageInfo p = packs.get(i);

        Method getPackageSizeInfo;
        try {
            getPackageSizeInfo = packageManager.getClass()
                    .getMethod("getPackageSizeInfo",
                        String.class, Class.forName("android.content.pm.IPackageStatsObserver"));

            getPackageSizeInfo.invoke(packageManager, p.packageName,
                    new IPackageStatsObserver.Stub() { //error

                        public void onGetStatsCompleted(
                                PackageStats pStats, boolean succeeded)
                                throws RemoteException {

                            totalSize = totalSize + pStats.cacheSize;
                            Log.d("size", totalSize+"");
                            Toast.makeText(getApplicationContext(), "size"+totalSize, Toast.LENGTH_SHORT).show();
                        }
                    }
            );

        } catch (Exception e) {
            try {
                getPackageSizeInfo = packageManager.getClass()
                        .getMethod("getPackageSizeInfo",
                            String.class, Class.forName("android.content.pm.IPackageStatsObserver"));

                getPackageSizeInfo.invoke(packageManager, p.packageName,
                        new IPackageStatsObserver.Stub() { //error

                            public void onGetStatsCompleted(
                                    PackageStats pStats, boolean succeeded)
                                    throws RemoteException {

                                totalSize = totalSize + pStats.cacheSize;
                                Log.d("size", totalSize+"");
                                Toast.makeText(getApplicationContext(), "size"+totalSize, Toast.LENGTH_SHORT).show();
                            }
                        }
                );
            } catch (Exception ee) {
                Log.d("eeeeeeeeeee", "error");
                ee.printStackTrace();
            } 
        } 
    }

    Log.d("return size", totalSize+"");
    Toast.makeText(getApplicationContext(), "return size"+totalSize, Toast.LENGTH_SHORT).show();
    return totalSize;
}
Run Code Online (Sandbox Code Playgroud)

IPackageStatsObserver在Android SDK中不可用.也许加载Stub类Class.forName(),找到默认的构造函数并调用它来获取一个新的实例Stub.但我应该怎么编码,我对此一无所知!?

救命 !!

Mat*_*ini 14

要解决您的问题,请执行以下步骤:

Android Studio

  • 右键单击项目" 新建">"文件夹">"AIDL文件夹"
  • 完成
  • 右键单击aidl文件夹New> Package
  • 插入android.content.pm并按OK
  • 下载IPackageStatsObserver.aidl
  • 复制android.content.pm包中的aidl文件
  • 构建>重建项目

日食

  • 右键单击src文件夹New> Package
  • 插入 android.content.pm
  • 完成
  • 下载IPackageStatsObserver.aidl
  • 复制android.content.pm包中的aidl文件
  • 选择类,totalCacheSize然后选择Source> Organize Imports