问题描述
当用户尝试从我的应用共享 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 (将#修改为@)