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 ;
//全局变量,保存当前查询包得信息
private long cachesize ; //缓存大小
private long datasize ; //数据大小
private long codesize ; //应用程序大小
private long totalsize ; //总大小
@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(); // 查询所有应用程序信息
BrowseApplicationInfoAdapter browseAppAdapter = new BrowseApplicationInfoAdapter(
this, mlistAppInfo);
listview.setAdapter(browseAppAdapter);
listview.setOnItemClickListener(this);
}
// 点击弹出对话框,显示该包得大小
public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3) {
//更新显示当前包得大小信息
try {
queryPacakgeSize(mlistAppInfo.get(position).getPkgName());
} catch (Exception e) {
// TODO Auto-generated catch block
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) ; //缓存大小
TextView tvdatasize = (TextView) dialog.findViewById(R.id.tvdatasize) ; //数据大小
TextView tvcodesize = (TextView) dialog.findViewById(R.id.tvcodesize) ; // 应用程序大小
TextView tvtotalsize = (TextView) dialog.findViewById(R.id.tvtotalsize) ; //总大小
//类型转换并赋值
tvcachesize.setText(formateFileSize(cachesize));
tvdatasize.setText(formateFileSize(datasize)) ;
tvcodesize.setText(formateFileSize(codesize)) ;
tvtotalsize.setText(formateFileSize(totalsize)) ;
//显示自定义对话框
AlertDialog.Builder builder =new AlertDialog.Builder(MainActivity.this) ;
builder.setView(dialog) ;
builder.setTitle(mlistAppInfo.get(position).getAppLabel()+"的大小信息为:") ;
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel() ; // 取消显示对话框
}
});
builder.create().show() ;
}
public void queryPacakgeSize(String pkgName) throws Exception{
if ( pkgName != null){
//使用放射机制得到PackageManager类的隐藏函数getPackageSizeInfo
PackageManager pm = getPackageManager(); //得到pm对象
try {
//通过反射机制获得该隐藏函数
Method getPackageSizeInfo = pm.getClass().getDeclaredMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);
//调用该函数,并且给其分配参数 ,待调用流程完成后会回调PkgSizeObserver类的函数
getPackageSizeInfo.invoke(pm, pkgName,new PkgSizeObserver());
}
catch(Exception ex){
Log.e(TAG, "NoSuchMethodException") ;
ex.printStackTrace() ;
throw ex ; // 抛出异常
}
}
}
//aidl文件形成的Bindler机制服务类
public class PkgSizeObserver extends IPackageStatsObserver.Stub{
/*** 回调函数,
* @param pStatus ,返回数据封装在PackageStats对象中
* @param succeeded 代表回调成功
*/
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
// TODO Auto-generated method stub
cachesize = pStats.cacheSize ; //缓存大小
datasize = pStats.dataSize ; //数据大小
codesize = pStats.codeSize ; //应用程序大小
totalsize = cachesize + datasize + codesize ;
Log.i(TAG, "cachesize--->"+cachesize+" datasize---->"+datasize+ " codeSize---->"+codesize) ;
}
}
//系统函数,字符串转换 long -String (kb)
private String formateFileSize(long size){
return Formatter.formatFileSize(MainActivity.this, size);
}
// 获得所有启动Activity的信息,类似于Launch界面
public void queryAppInfo() {
PackageManager pm = this.getPackageManager(); // 获得PackageManager对象
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// 通过查询,获得所有ResolveInfo对象.
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, 0);
// 调用系统排序 , 根据name排序
// 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序
Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(pm));
if (mlistAppInfo != null) {
mlistAppInfo.clear();
for (ResolveInfo reInfo : resolveInfos) {
String activityName = reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name
String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名
String appLabel = (String) reInfo.loadLabel(pm); // 获得应用程序的Label
Drawable icon = reInfo.loadIcon(pm); // 获得应用程序图标
// 为应用程序的启动Activity 准备Intent
Intent launchIntent = new Intent();
launchIntent.setComponent(new ComponentName(pkgName,activityName));
// 创建一个AppInfo对象,并赋值
AppInfo appInfo = new AppInfo();
appInfo.setAppLabel(appLabel);
appInfo.setPkgName(pkgName);
appInfo.setAppIcon(icon);
appInfo.setIntent(launchIntent);
mlistAppInfo.add(appInfo); // 添加至列表中
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android中获取应用程序(包)的信息 PackageManager的使用
共95个文件
class:36个
java:14个
xml:14个
5星 · 超过95%的资源 需积分: 49 4.4k 下载量 79 浏览量
2011-11-09
20:07:49
上传
评论 31
收藏 179KB RAR 举报
温馨提示
Android中获取应用程序(包)的信息 PackageManager的使用
资源推荐
资源详情
资源评论
收起资源包目录
获得应用程序信息 PackageManager的使用.rar (95个子文件)
Application__Size
bin
classes.dex 14KB
android
content
pm
IPackageStatsObserver.class 385B
IPackageStatsObserver.aidl 1KB
IPackageStatsObserver$Stub.class 2KB
IPackageStatsObserver$Stub$Proxy.class 2KB
PackageStats.aidl 736B
com
qin
appsize
MainActivity.class 8KB
MainActivity$1.class 900B
R$layout.class 474B
R$id.class 676B
R$drawable.class 391B
MainActivity$PkgSizeObserver.class 2KB
BrowseApplicationInfoAdapter$ViewHolder.class 996B
R$attr.class 331B
AppInfo.class 2KB
R.class 510B
BrowseApplicationInfoAdapter.class 3KB
R$string.class 418B
resources.ap_ 13KB
Application__Size.apk 21KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
values
strings.xml 171B
drawable-mdpi
icon.png 3KB
layout
browse_app_list.xml 361B
dialog_app_size.xml 2KB
browse_app_item.xml 1KB
assets
default.properties 364B
gen
android
content
pm
IPackageStatsObserver.java 3KB
com
qin
appsize
R.java 1KB
src
android
content
pm
IPackageStatsObserver.aidl 1KB
PackageStats.aidl 736B
com
qin
appsize
MainActivity.java 6KB
AppInfo.java 1KB
BrowseApplicationInfoAdapter.java 2KB
.project 853B
.classpath 280B
AndroidManifest.xml 730B
Application_VariableApp
bin
classes.dex 9KB
com
qiner
appinfo
MainActivity.class 4KB
R$layout.class 469B
R$id.class 680B
R$drawable.class 397B
BrowseApplicationInfoAdapter$ViewHolder.class 1006B
R$attr.class 337B
AppInfo.class 1KB
R.class 524B
BrowseApplicationInfoAdapter.class 3KB
R$string.class 584B
FilterApplication.class 2KB
qin
appinfo
resources.ap_ 13KB
Application_VariableApp.apk 19KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
values
strings.xml 416B
drawable-mdpi
icon.png 3KB
layout
browse_app_list.xml 360B
browse_app_item.xml 1KB
main.xml 847B
assets
default.properties 364B
gen
com
qiner
appinfo
R.java 2KB
qin
appinfo
src
com
qiner
appinfo
FilterApplication.java 2KB
MainActivity.java 3KB
AppInfo.java 958B
BrowseApplicationInfoAdapter.java 2KB
.project 859B
.classpath 280B
AndroidManifest.xml 603B
ApplicatioInfo_SimpleLauncher
bin
classes.dex 8KB
ApplicatioInfo_SimpleLauncher.apk 17KB
com
qin
appinfo
MainActivity.class 4KB
R$layout.class 435B
R$id.class 538B
R$drawable.class 391B
BrowseApplicationInfoAdapter$ViewHolder.class 996B
R$attr.class 331B
AppInfo.class 1KB
R.class 510B
BrowseApplicationInfoAdapter.class 3KB
R$string.class 418B
resources.ap_ 12KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
values
strings.xml 179B
drawable-mdpi
icon.png 3KB
layout
browse_app_list.xml 361B
browse_app_item.xml 1KB
assets
default.properties 364B
gen
com
qin
appinfo
R.java 1KB
src
com
qin
appinfo
MainActivity.java 3KB
AppInfo.java 956B
BrowseApplicationInfoAdapter.java 2KB
.project 865B
.classpath 280B
AndroidManifest.xml 608B
共 95 条
- 1
qinjuning
- 粉丝: 5296
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页