【发布时间】:2018-03-14 16:33:50
【问题描述】:
我有使用 IPackageStatsObserver 计算已安装应用程序存储大小、数据大小和缓存大小的方法,但在实际设备上,callback.onSucces() 没有被触发。在模拟器上工作正常,但从未调用过成功。我在清单中也有 GET_PACKAGE_SIZE 权限。
这里是代码
public void requestAppInfo(String packageName, final AsyncDataReceiver<ArrayList<InstalledAppItem>> callback) {
PackageManager packageManager = getPackageManager();
try {
Method getPackageSizeInfo = packageManager.getClass().getMethod(GET_PACKAGE_SIZE_INFO, String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, packageName, new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
int appSize = (int) pStats.codeSize / 1048576;
int dataSize = (int) pStats.dataSize / 1024;
int cacheSize = (int) pStats.cacheSize / 1024;
systemData.clear();
systemData.add(new InstalledAppItem(0, "Internal Storage Used", appSize + " MB"));
systemData.add(new InstalledAppItem(1, "Data Used", dataSize + " KB"));
systemData.add(new InstalledAppItem(2, "Cache Used", cacheSize + "KB"));
//TODO Check Why callback not triggered on board.
callback.onSuccess(systemData);
}
});
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
【问题讨论】:
标签: android android-package-managers