当用户尝试从我的应用共享 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;
}
}
}