我是Java和Android应用程序开发的新手。 我试图阅读安装的应用程序的总大小。根据本网站上的一些建议,我使用了PackageStats方法来读取下面的大小
for (ApplicationInfo apInfo: installedApps) {
if ((apInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0) {
Method getPackageSizeInfo = mPackageManager.getClass().getMethod(
"getPackageSizeInfo", String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(mPackageManager, item.applicationInfo.packageName, new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(final PackageStats pStats, boolean succeeded)
throws RemoteException {
AppSize = pStats.codeSize + pStats.cacheSize + pStats.dataSize
+ pStats.externalCodeSize + pStats.externalCacheSize + pStats.externalDataSize
+ pStats.externalMediaSize + pStats.externalObbSize;
} totalAppSize = totalAppSize + AppSize;
注意:我获取了一个信号量并在读取循环结束时释放。 totalAppSize在每次运行时都不同。任何线索都会受到赞赏。
答案 0 :(得分:0)
首先,在您的清单文件中,您需要获得
的许可 <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
完成后请按照以下步骤操作
Android Studio •右键单击您的项目New&gt;文件夹&gt; AIDL文件夹
•按完成
•右键单击aidl文件夹New&gt;封装
•插入android.content.pm并按OK
•复制android.content.pm包中的aidl文件
•构建&gt;重建项目
完成此操作后,您只需要获取pstats.codeSize
try {
PackageManager pm = getPackageManager();
Method getPackageSizeInfo = pm.getClass().getMethod(
"getPackageSizeInfo", String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(pm, "com.android.mms",
new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
Log.i("TEST", "codeSize: " + pStats.codeSize);
}
});
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
正如你在官方android Documentation中看到的那样pstatus.codeSize返回apk安装的大小,但还有其他方法。我测试了它,它适用于我
快乐编码:)