gpt4 book ai didi

java - 查找已安装应用程序的 APK 大小

转载 作者:行者123 更新时间:2023-11-29 22:14:26 27 4
gpt4 key购买 nike

我正在尝试计算已安装应用程序的 apk 文件大小。这是代码

 public class PackageTabActivity extends ListActivity{

private static final String APP_NAME = "app_name";
private static final String APP_ICON = "app_icon";
private static final String APP_SIZE = "app_size";
Method getPackageSizeInfo = null;
PackageManager pm ;
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
pm = getPackageManager();


try {
getPackageSizeInfo = pm.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
} catch (SecurityException e1) {

e1.printStackTrace();
} catch (NoSuchMethodException e1) {

e1.printStackTrace();
}
new AppDetails().execute();
}

private boolean isSystemPackage(PackageInfo pkgInfo) {
return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true
: false;
}


class AppDetails extends AsyncTask<Void, Void, ArrayList<HashMap<String , Object>>>
{
private long app_apk_size;
ProgressDialog mDialog;
@Override
public void onPreExecute()
{
mDialog = new ProgressDialog(PackageTabActivity.this);
mDialog.setCancelable(true);
mDialog.setMessage("Loading... " );
mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mDialog.setProgress(0);
mDialog.show();
}
@Override
protected ArrayList<HashMap<String, Object>> doInBackground(
Void... params) {

ArrayList<HashMap<String,Object>> applistwithicon = new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> hm;
String appname;
Drawable icon = null;
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

for(int i=0;i<packs.size();i++) {

PackageInfo p = packs.get(i);


if(!isSystemPackage(p))
{
hm = new HashMap<String, Object>();
appname = p.applicationInfo.loadLabel(getPackageManager()).toString();

icon = p.applicationInfo.loadIcon(getPackageManager());
Log.v("package name", "package name =" + p.packageName);
try {
getPackageSizeInfo.invoke(pm, p.packageName, new IPackageStatsObserver.Stub() {

public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {

app_apk_size = pStats.codeSize;
Log.v("apksize", "appsize = "+app_apk_size);
}
});
}catch(IllegalAccessException e) {}
catch(IllegalArgumentException r) {}
catch(InvocationTargetException w){}

hm.put(APP_SIZE, (app_apk_size/(1024)));
hm.put(APP_ICON, icon);
hm.put(APP_NAME, appname);
applistwithicon.add(hm);
}
}

return applistwithicon;
}
@Override
public void onPostExecute(ArrayList<HashMap<String, Object>> result)
{
mDialog.dismiss();
CustomAdapterList myAdapter = new CustomAdapterList(result,PackageTabActivity.this );

setListAdapter(myAdapter);

}
}
}

这里IPackageStatsObserver是一个接口(interface)(aidl文件)。这在模拟器上给了我正确的结果,但在电话上。它混合了正确和错误的应用程序大小。

我现在完全卡住了,找不到任何解决方法。

如有任何帮助,我们将不胜感激。

最佳答案

ApplicationInfo tmpInfo = context.getPackageManager().getApplicationInfo(packageName,-1);
long size = new File(tmpInfo.sourceDir).length();

关于java - 查找已安装应用程序的 APK 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8801769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com