已安装的应用程序大小未显示在设备上

时间:2021-04-16 15:56:19

标签: android android-studio apk android-adapter listadapter

当用户尝试从我的应用共享 apk 文件时,我想显示应用版本和大小。 我的代码在模拟器和真实设备上都运行良好,但未显示已安装的应用程序大小,仅显示包名称和应用程序版本。我不知道我在 ApplicationListAdapter 上的代码有什么问题。

下面是我在 ApplicationListAdapter 上的代码。

应该有人帮帮我,我还卡在这个级别,请问谁能帮帮我

public class ApplicationListAdapter
    extends EditableListAdapter<ApplicationListAdapter.PackageHolder, EditableListAdapter.EditableViewHolder>
{
    private SharedPreferences mPreferences;
    private PackageManager mManager;


    public ApplicationListAdapter(Context context, SharedPreferences preferences)
    {
        super(context);
        mPreferences = preferences;
        mManager = context.getPackageManager();

    }


    @RequiresApi(api = Build.VERSION_CODES.N)


    public List<PackageHolder> onLoad()
    {
        List<PackageHolder> list = new ArrayList<>();
        boolean showSystemApps = mPreferences.getBoolean("show_system_apps", false);

        for (PackageInfo packageInfo : getContext().getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA)) {
            ApplicationInfo appInfo = packageInfo.applicationInfo;


            Method getPackageSizeInfo;
            ApplicationListAdapter context = null;
            Object packageName = null;
            try {
                getPackageSizeInfo = context.getPackageManager().getClass()
                        .getMethod("getPackageSizeInfo",
                                String.class, Class.forName("android.content.pm.IPackageStatsObserver"));

                getPackageSizeInfo.invoke(context.getPackageManager(), packageName,
                        new IPackageStatsObserver.Stub() { //error

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

                                //totalSize = totalSize + pStats.cacheSize;
                                //Log.d("size", totalSize+"");
                                Toast.makeText(getApplicationContext(), "size"+pStats.cacheSize + ",," + pStats.dataSize + ",," + pStats.codeSize, Toast.LENGTH_SHORT).show();
                            }
                        }
                );
            } catch (Exception e) {
                try {
                    getPackageSizeInfo = context.getPackageManager().getClass()
                            .getMethod("getPackageSizeInfo",
                                    String.class, Class.forName("android.content.pm.IPackageStatsObserver"));

                    getPackageSizeInfo.invoke(context.getPackageManager(), packageName,
                            new IPackageStatsObserver.Stub() { //error

                                public void onGetStatsCompleted(
                                        PackageStats pStats, boolean succeeded)
                                        throws RemoteException {
                                    Toast.makeText(getApplicationContext(), "size"+pStats.cacheSize, Toast.LENGTH_SHORT).show();
                                }
                            }
                    );
                } catch (Exception ee) {
                    Log.d("eeeeeeeeeee", "error");
                    ee.printStackTrace();
                }
            }


            if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1 || showSystemApps) {
                PackageHolder packageHolder = new PackageHolder(String.valueOf(appInfo.loadLabel(mManager)),
                        appInfo,
                        packageInfo.versionName,
                        packageInfo.packageName,
                        new File(appInfo.sourceDir));

                if (filterItem(packageHolder))
                    list.add(packageHolder);
            }
        }

        Collections.sort(list, getDefaultComparator());


        return list;
    }
    
    private Context getApplicationContext() {
        return null;
    }

    
    private PackageManager getPackageManager() {
        return null;
    }

    @NonNull
    @Override
    public EditableListAdapter.EditableViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {
        return new EditableListAdapter.EditableViewHolder(getInflater().inflate(R.layout.row_apps, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull final EditableListAdapter.EditableViewHolder holder, final int position)
    {
        try {

            final View parentView = holder.getView();
            final PackageHolder object = getItem(position);
            ImageView image = parentView.findViewById(R.id.image);
            TextView text1 = parentView.findViewById(R.id.text);
            TextView text2 = parentView.findViewById(R.id.text2);


            text1.setText(object.friendlyName);
            text2.setText(object.version);



            parentView.setSelected(object.isSelectableSelected());

            GlideApp.with(getContext())
                    .load(object.appInfo)
                    .override(160)
                    .centerCrop()
                    .into(image);
        } catch (Exception e) {
        }
    }

    private TemporalAccessor getContentResolver() {


        return null;
    }


    public static long getApkSize(Context context, String packageName) throws PackageManager.NameNotFoundException{
        return new File(context.getPackageManager().getApplicationInfo(packageName, 0).publicSourceDir).length();
    }

    public static class PackageHolder extends Shareable
    {
        public static final String FORMAT = ".apk";
        public static final String MIME_TYPE = FileUtils.getFileContentType(FORMAT);

        public ApplicationInfo appInfo;
        public String version;
        public String packageName;


        public PackageHolder(String friendlyName, ApplicationInfo appInfo, String version, String packageName,  File executableFile)
        {
            super(appInfo.packageName.hashCode(),
                    friendlyName,
                    friendlyName + "_" + version + ".apk",
                    MIME_TYPE,
                    executableFile.lastModified(),
                    executableFile.length(),
                    Uri.fromFile(executableFile));

            this.appInfo = appInfo;
            this.version = version;
            this.packageName = packageName;
        }
    }
}

0 个答案:

没有答案