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

问题描述

用户尝试从我的应用共享 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",Class.forName("android.content.pm.IPackageStatsObserver"));

                    getPackageSizeInfo.invoke(context.getPackageManager(),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;
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...