English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Código de ejemplo para obtener el tamaño y la caché de la aplicación de Android

info

package com.qin.appsize;
import android.content.Intent;
import android.graphics.drawable.Drawable;
//Clase modelo, utilizada para almacenar información de la aplicación
public class AppInfo {
private String appLabel; //La etiqueta de la aplicación
private Drawable appIcon ; //La imagen de la aplicación
private Intent intent ; //El Intento para iniciar la aplicación, generalmente el Action es Main y la Category es Lancher de la Activity
private String pkgName ; //El nombre del paquete correspondiente a la aplicación
private long cachesize ; //tamaño de la caché
private long datasize ; //Tamaño de los datos
private long codesieze ; //Tamaño de la aplicación
public long getCachesize() {
return cachesize;
}
public void setCachesize(long cachesize) {
this.cachesize = cachesize;
}
public long getDatasize() {
return datasize;
}
public void setDatasize(long datasize) {
this.datasize = datasize;
}
public long getCodesieze() {
return codesieze;
}
public void setCodesieze(long codesieze) {
this.codesieze = codesieze;
}
public AppInfo(){}
public String getAppLabel() {
return appLabel;
}
public void setAppLabel(String appName) {
this.appLabel = appName;
}
public Drawable getAppIcon() {}}
return appIcon;
}
public void setAppIcon(Drawable appIcon) {
this.appIcon = appIcon;
}
public Intent getIntent() {
return intent;
}
public void setIntent(Intent intent) {
this.intent = intent;
}
public String getPkgName(){
return pkgName ;
}
public void setPkgName(String pkgName){
this.pkgName=pkgName ;
}
}

clase personalizada

package com.qin.appsize;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
//clase adaptadora personalizada, proporciona vistas personalizadas para listView
public class BrowseApplicationInfoAdapter extends BaseAdapter {
private List<AppInfo> mlistAppInfo = null;
LayoutInflater infater = null;
public BrowseApplicationInfoAdapter(Context context, List<AppInfo> apps) {
infater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mlistAppInfo = apps ;
}
@Override
public int getCount() {
// TODO Auto-generador de métodos de plantilla
System.out.println("size" + mlistAppInfo.size());
return mlistAppInfo.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generador de métodos de plantilla
return mlistAppInfo.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generador de métodos de plantilla
return 0;
}
@Override
public View getView(int position, View convertview, ViewGroup arg2) {
System.out.println("getView en " + position);
View view = null;
ViewHolder holder = null;
if (convertview == null || convertview.getTag() == null) {
view = infater.inflate(R.layout.browse_app_item, null);
holder = new ViewHolder(view);
view.setTag(holder);
} 
else{
view = convertview ;
holder = (ViewHolder) convertview.getTag() ;
}
AppInfo appInfo = (AppInfo) getItem(position);
holder.appIcon.setImageDrawable(appInfo.getAppIcon());
holder.tvAppLabel.setText(appInfo.getAppLabel());
holder.tvPkgName.setText(appInfo.getPkgName());
return view;
}
class ViewHolder {
ImageView appIcon;
TextView tvAppLabel;
TextView tvPkgName;
public ViewHolder(View view) {
this.appIcon = (ImageView) view.findViewById(R.id.imgApp);
this.tvAppLabel = (TextView) view.findViewById(R.id.tvAppLabel);
this.tvPkgName = (TextView) view.findViewById(R.id.tvPkgName);
}
}
}

Clase principal

package com.qin.appsize;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.qin.appsize.AppInfo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.RemoteException;
import android.text.format.Formatter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget(AdapterView);
import android.widget.ListView;
import android.widget.TextView;
import android.widget(AdapterView.OnItemClickListener);
public class MainActivity extends Activity implements OnItemClickListener{
private static String TAG = "APP_SIZE";
private ListView listview = null;
private List<AppInfo> mlistAppInfo = null;
LayoutInflater infater = null ; 
//Variable global, guardar la información del paquete consultado actual
private long cachesize ; //tamaño de la caché
private long datasize ; //Tamaño de los datos 
private long codesize ; //Tamaño de la aplicación
private long totalsize ; //Tamaño total
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse_app_list);
listview = (ListView) findViewById(R.id.listviewApp);
mlistAppInfo = new ArrayList<AppInfo>();
queryAppInfo(); // Consultar información de todas las aplicaciones
BrowseApplicationInfoAdapter browseAppAdapter = new BrowseApplicationInfoAdapter(
this, mlistAppInfo);
listview.setAdapter(browseAppAdapter);
listview.setOnItemClickListener(this);
}
// Hacer clic para abrir un cuadro de diálogo emergente y mostrar el tamaño del paquete
public void onItemClick(AdapterView<63;> arg0, View view, int position, long arg3) {
//Actualizar la información de tamaño actual del paquete
try {
queryPacakgeSize(mlistAppInfo.get(position).getPkgName());
} catch (Exception e) {
// TODO Auto-generado bloque de captura
e.printStackTrace();
} 
infater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialog = infater.inflate(R.layout.dialog_app_size, null) ;
TextView tvcachesize = (TextView) dialog.findViewById(R.id.tvcachesize) ; //tamaño de la caché
TextView tvdatasize = (TextView) dialog.findViewById(R.id.tvdatasize) ; //Tamaño de los datos
TextView tvcodesize = (TextView) dialog.findViewById(R.id.tvcodesize) ; // Tamaño de la aplicación
TextView tvtotalsize = (TextView) dialog.findViewById(R.id.tvtotalsize) ; //Tamaño total
//Conversión de tipo y asignación de valor
tvcachesize.setText(formateFileSize(cachesize));
tvdatasize.setText(formateFileSize(datasize)) ;
tvcodesize.setText(formateFileSize(codesize)) ;
tvtotalsize.setText(formateFileSize(totalsize)) ;
//Mostrar cuadro de diálogo personalizado
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ;
builder.setView(dialog) ;
builder.setTitle(mlistAppInfo.get(position).getAppLabel())+"tamaño de la información de: ") ;
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generador de métodos de plantilla
dialog.cancel() ; // cancelar la visualización del cuadro de diálogo
}
});
builder.create().show() ;
}
public void queryPacakgeSize(String pkgName) throws Exception{
if ( pkgName != null){
//obtener la función oculta getPackageSizeInfo de la clase PackageManager mediante el mecanismo de reflexión
PackageManager pm = getPackageManager(); //obtener el objeto pm
try {
//obteniendo la función oculta mediante el mecanismo de reflexión
Method getPackageSizeInfo = pm.getClass().getDeclaredMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);
//llamar a esta función y asignarle parámetros, después de que el flujo de llamada se complete, se llamará a la función de la clase PkgSizeObserver
getPackageSizeInfo.invoke(pm, pkgName,new PkgSizeObserver());
} 
catch(Exception ex){
Log.e(TAG, "NoSuchMethodException") ;
ex.printStackTrace() ;
throw ex ; // lanza excepción
} 
}
}
//clase de servicio de mecanismo Binder formada por archivos aidl
public class PkgSizeObserver extends IPackageStatsObserver.Stub{
/*** función de devolución de llamada,
* @param pStatus , los datos encapsulados se encuentran en el objeto PackageStats
* @param succeeded representa el éxito de la devolución de llamada
*/ 
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
lanza RemoteException {
// TODO Auto-generador de métodos de plantilla
cachesize = pStats.cacheSize ; //tamaño de la caché
datasize = pStats.dataSize ; //Tamaño de los datos 
codesize = pStats.codeSize ; //Tamaño de la aplicación
totalsize = cachesize + datasize + codesize ;
Log.i(TAG, "cachesize--->"+cachesize+" datasize---->"+datasize+ " codeSize---->"+codesize) ;
}
}
//Función del sistema, conversión de cadena long -String (kb)
private String formateFileSize(long size){
return Formatter.formatFileSize(MainActivity.this, size); 
}
// Obtener toda la información de las actividades de inicio, al estilo de la interfaz de inicio
public void queryAppInfo() {
PackageManager pm = this.getPackageManager(); // Obtener el objeto PackageManager
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// A través de la consulta, obtiene todos los objetos ResolveInfo.
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, 0);
// Llame a la ordenación del sistema, según el nombre
// Esta ordenación es muy importante, de lo contrario, solo se pueden mostrar aplicaciones del sistema y no se pueden listar aplicaciones de terceros
Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm));
if (mlistAppInfo != null) {
mlistAppInfo.clear();
for (ResolveInfo reInfo : resolveInfos) {
String activityName = reInfo.activityInfo.name; // Obtener el nombre de la actividad de inicio de la aplicación
String pkgName = reInfo.activityInfo.packageName; // Obtener el nombre del paquete de la aplicación
String appLabel = (String) reInfo.loadLabel(pm); // Obtener la etiqueta de la aplicación
Drawable icon = reInfo.loadIcon(pm); // Obtener el icono de la aplicación
// Preparar Intent para el Activity de inicio de la aplicación
Intent launchIntent = new Intent();
launchIntent.setComponent(new ComponentName(pkgName,activityName));
// Crear un objeto AppInfo y asignar valores
AppInfo appInfo = new AppInfo();
appInfo.setAppLabel(appLabel);
appInfo.setPkgName(pkgName);
appInfo.setAppIcon(icon);
appInfo.setIntent(launchIntent);
mlistAppInfo.add(appInfo); // Añadir a la lista
}
}
}
}

Los códigos de ejemplo de Android para obtener el tamaño y la caché de la aplicación que el editor le ha presentado a ustedes, esperamos que les sea útil. Si tienen alguna pregunta, déjenos un mensaje y el editor responderá a tiempo. También agradecemos enormemente el apoyo de todos a la página web de tutoriales de grito!

Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y se carga por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado una edición humana y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @ para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.)

Te gustará también