java - IPackageStatsObserver 无法解析为类型 (Android)

标签 java android sdk

我想计算使用该设备的所有缓存内存的总和。为此,我收到一个编译时间错误:

IPackageStatsObserver cannot be resolved to a type

我在代码中提到过这个错误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;
}

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

求助!!

最佳答案

要解决您的问题,请按照以下步骤操作:

安卓工作室

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

eclipse

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

关于java - IPackageStatsObserver 无法解析为类型 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791461/

相关文章:

java - 具有队列基​​本功能的最快 Java 集合是什么?

java - 什么是非法反射访问?

android - 如何显示列出所有文件夹而不是路径中的文件

cocoa - Xcode : cannot change main nib file

android - 无法构建 : the file dx. 未从 SDK 文件夹加载 jar

适用于 Mac 的 Java EE SDK

java - 第 2 轮 : keeping components preferred sizes in border layout, 带有滚动和选项卡式 Pane

java - 转换为父类并丢失信息 - 存储对象的一部分

java - Unresolved 类 'FileProvider'

Android Studio 3 金丝雀 & Kotlin