我是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都是不同的。任何线索都将不胜感激。
发布于 2015-12-22 21:37:57
首先,在您的清单文件中,您需要授予
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>完成后,请按照以下步骤操作
Android Studio·右键单击您的项目新建>文件夹> AIDL文件夹
·按下Finish
·右键单击aidl文件夹新建>包
·插入android.content.pm并按OK
·将aidl文件复制到android.content.pm包中
·生成>重建项目
完成此操作后,您只需获取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的大小,但是还有其他的方法。我已经测试过了,它对我来说很有效
快乐编码:)
https://stackoverflow.com/questions/34416522
复制相似问题