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