重點(diǎn):android N 的改動(dòng)
/**
* 通過AIDL的方法來獲取到應(yīng)用的緩存信息么夫,getPackageSizeInfo是PackageManager里面的一個(gè)私有方法來的
* 我們通過反射就可以調(diào)用到它的了彪杉,但是這個(gè)方法里面會(huì)傳遞一個(gè)IPackageStatsObserver.Stub的對(duì)象
* 里面就可能通過AIDL來獲取我們想要的信息了
* <p>
* 因?yàn)檫@樣的調(diào)用是異步的诈泼,所以當(dāng)我們完成獲取完這些信息之后绷雏,我們就通過handler來發(fā)送一個(gè)消息
* 來通知我們的應(yīng)用窗轩,通過getUninstallAppBeans來獲取到我們的Vector
* <p>
* 為什么要用Vector呢桩撮,因?yàn)橄旅娴姆椒ㄊ钱惒降睦拙睿簿褪怯锌赡苁嵌嗑€程操作难咕,所以我們就用了線程安全的Vector
*
* @param uninstallAppBean
* @param position
*/
public void initDataSize(final UninstallAppBean uninstallAppBean, final int position) throws Exception {
//判斷是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
try {
Method getPackageSizeInfo = PackageManager.class.getMethod("getPackageSizeInfo", String.class, int.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, uninstallAppBean.getPackageName(), android.os.Process.myPid() / 100000, new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(
PackageStats pStats, boolean succeeded)
throws RemoteException {
long cacheSize = pStats.cacheSize;
long codeSize = pStats.codeSize;
long dataSize = pStats.dataSize;
uninstallAppBean.setMemorySize(dataSize + codeSize);
uninstallAppBean.setCacheSize(cacheSize);
uninstallAppBean.setCodeSize(codeSize);
uninstallAppBean.setDataSize(dataSize);
UninstallAppBeans.add(uninstallAppBean);
// 當(dāng)完全獲取完信息之后课梳,發(fā)送一個(gè)成功的消息
if (position == (size - 1)) {
Message msg = handler.obtainMessage();
msg.what = SCAN_SIZE_FINISH;
handler.sendMessage(msg);
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
} else {
try {
Method getPackageSizeInfo = PackageManager.class.getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, uninstallAppBean.getPackageName(), new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(
PackageStats pStats, boolean succeeded)
throws RemoteException {
long cacheSize = pStats.cacheSize;
long codeSize = pStats.codeSize;
long dataSize = pStats.dataSize;
uninstallAppBean.setMemorySize(dataSize + codeSize);
uninstallAppBean.setCacheSize(cacheSize);
uninstallAppBean.setCodeSize(codeSize);
uninstallAppBean.setDataSize(dataSize);
UninstallAppBeans.add(uninstallAppBean);
// 當(dāng)完全獲取完信息之后,發(fā)送一個(gè)成功的消息
if (position == (size - 1)) {
Message msg = handler.obtainMessage();
msg.what = SCAN_SIZE_FINISH;
handler.sendMessage(msg);
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}
}