Android 获取应用总大小
本文的所有代码都是用kotlin写的,但是原理都是一样的。一个应用的总大小,包括应用大小、用户数据和缓存。这些数据我们该怎样获取了,下面我们一起来看一看!
Android 8.0以前的获取方法
在Android 8.0以前获取应用的总大小,google没有提供对应API,但是我们可以通过反射来获取,代码如下:
fun getAppTotalsize(context: Context, pkgName: String) {
val mPackManager: PackageManager = context.packageManager
//反射获取PackageManager内部getPackageSizeInfo方法
val method = PackageManager::class.java.getMethod("getPackageSizeInfo", String::class.java, IPackageStatsObserver::class.java)
var appSizeL: Long
method.invoke(mPackManager, pkgName, object : IPackageStatsObserver.Stub() {
@Throws(RemoteException::class)
override fun onGetStatsCompleted(pStats: PackageStats, succeeded: Boolean) {
//应用的总大小等于缓存大小加上数据大小再加上应用的大小
appSizeL = pStats.cacheSize + pStats.dataSize + pStats.codeSize
})
}
上面的代码还是很简单的,但是有的同学可能会不理解,IPackageStatsObserver.Stub()
是怎么来的,其实就是IPC,上面的实现需要有两个aidl文件IPackageStatsObserver.aidl和PackageStats.aidl,他们的内容如下:
IPackageStatsObserver.aidl
package android.content