获取从sd卡加载的apk文件的图标信息.docx

上传人:b****7 文档编号:10616734 上传时间:2023-02-21 格式:DOCX 页数:18 大小:19.59KB
下载 相关 举报
获取从sd卡加载的apk文件的图标信息.docx_第1页
第1页 / 共18页
获取从sd卡加载的apk文件的图标信息.docx_第2页
第2页 / 共18页
获取从sd卡加载的apk文件的图标信息.docx_第3页
第3页 / 共18页
获取从sd卡加载的apk文件的图标信息.docx_第4页
第4页 / 共18页
获取从sd卡加载的apk文件的图标信息.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

获取从sd卡加载的apk文件的图标信息.docx

《获取从sd卡加载的apk文件的图标信息.docx》由会员分享,可在线阅读,更多相关《获取从sd卡加载的apk文件的图标信息.docx(18页珍藏版)》请在冰豆网上搜索。

获取从sd卡加载的apk文件的图标信息.docx

获取从sd卡加载的apk文件的图标信息

1.布局文件:

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

id="@+id/vw1"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

orientation="horizontal">

id="@+id/photo"

android:

layout_width="32px"

android:

layout_margin="4px"

android:

layout_height="32px"/>

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

orientation="vertical"

>

id="@+id/name"

android:

layout_width="fill_parent"

android:

layout_height="wrap_content"

/>

id="@+id/size"

android:

layout_width="fill_parent"

android:

layout_height="wrap_content"

/>

2.编写MainActivity,实现文件的遍历,并获得数据

packagecom.miki;

importjava.io.File;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

 

importandroid.app.Activity;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.os.Environment;

importandroid.util.Log;

importandroid.widget.ListView;

importandroid.widget.SimpleAdapter;

publicclassMainActivityextendsActivity{

privatestaticfinalStringTAG="MainActivity";

privateContextmContext;

privateArrayListlistItem;

privateStringsdcardDirectory=android.os.Environment.getExternalStorageDirectory()+"/test/";

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

ListViewlistView=newListView(this);

mContext=this;

//生成动态数组,加入数据

listItem=getFiles();

Log.i(TAG,"listItem="+listItem.size());

//构造适配器,指明数据源字段与listitem中子控件的对应关系

ApkInfoAdapteradapter=newApkInfoAdapter(this,listItem);

//添加适配器,进行绑定

listView.setAdapter(adapter);

setContentView(listView);

}

publicArrayListgetFiles(){

ArrayListlist=newArrayList();

Filefile=newFile(sdcardDirectory);

Filefiles[]=file.listFiles();

for(Filef:

files){

Log.i(TAG,"files.path="+f.getPath());

Log.i(TAG,"files.isDirEctory="+f.isDirectory());

Log.i(TAG,"files.name="+f.getName().toString().contains(".apk"));

if(f.isFile()&&f.getName().toString().endsWith(".apk")){

Log.i(TAG,"files.path="+f.getPath());

list.add(newGetIcon(mContext).showAPKIcon(f));

}

}

returnlist;

}

}

3.构造Adapter

packagecom.miki;

importjava.util.List;

 

importandroid.content.Context;

importandroid.util.Log;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.ImageView;

importandroid.widget.TextView;

publicclassApkInfoAdapterextendsBaseAdapter{

privatestaticfinalStringTAG="ApkInfoAdapter";

privateLayoutInflaterlayoutInflater;//用于从xml文件加载listview的layout

privateContextcontext;//容器activity

privateListinfos;

publicApkInfoAdapter(Contextcontext,Listlist){

this.context=context;

this.infos=list;

//Log.i(TAG,"infos="+infos.get(0).fileName);

layoutInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

 

@Override

publicintgetCount(){

//TODOAuto-generatedmethodstub

returninfos.size();

}

@Override

publicObjectgetItem(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}

@Override

publiclonggetItemId(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}

@Override

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

//TODOAuto-generatedmethodstub

ViewHolderholder=null;

if(convertView==null){

convertView=layoutInflater.inflate(R.layout.list,null);//通过flater初始化行

holder=newViewHolder();//并将行视图的3个子视图引用放到tag中

holder.pictrue=(ImageView)convertView.findViewById(R.id.photo);

holder.name=(TextView)convertView.findViewById(R.id.name);

holder.size=(TextView)convertView.findViewById(R.id.size);

convertView.setTag(holder);

}else{

holder=(ViewHolder)convertView.getTag();//若行已初始化,直接从tag属性获得子视图的引用

}

ApkInfoinfo=infos.get(position);//获得行数据(模型)

//根据模型数据,设置行视图的控件值

holder.pictrue.setImageDrawable(info.getIcon());

holder.name.setText(info.getApkName());

holder.size.setText(info.getFsize());

returnconvertView;

}

staticclassViewHolder{

ImageViewpictrue;

TextViewname;

TextViewsize;

}

 

}

4.创建实体类,即apk文件的相关信息

packagecom.miki;

importandroid.graphics.drawable.Drawable;

publicclassApkInfo{

publicStringapkName;//包中包含的apk名称

publicStringpackageName;//包名

publicDrawableicon;//图片

publicStringfsize;//文件

publicStringpath;//文件的绝对路径

publicbooleanpackageStates;//安装状态

publicStringvername;//版本号

publicStringoldvername;//已安装的版本号

publicStringfileName;//文件在T卡中的文件名

publicStringfilepath;//文件在T卡中的位置

publicintcomparestates;

publicStringgetApkName(){

returnapkName;

}

publicvoidsetApkName(StringapkName){

this.apkName=apkName;

}

publicStringgetPackageName(){

returnpackageName;

}

publicvoidsetPackageName(StringpackageName){

this.packageName=packageName;

}

publicDrawablegetIcon(){

returnicon;

}

publicvoidsetIcon(Drawableicon){

this.icon=icon;

}

publicStringgetFsize(){

returnfsize;

}

publicvoidsetFsize(Stringfsize){

this.fsize=fsize;

}

publicStringgetPath(){

returnpath;

}

publicvoidsetPath(Stringpath){

this.path=path;

}

publicbooleanisPackageStates(){

returnpackageStates;

}

publicvoidsetPackageStates(booleanpackageStates){

this.packageStates=packageStates;

}

publicStringgetVername(){

returnvername;

}

publicvoidsetVername(Stringvername){

this.vername=vername;

}

publicStringgetOldvername(){

returnoldvername;

}

publicvoidsetOldvername(Stringoldvername){

this.oldvername=oldvername;

}

publicStringgetFileName(){

returnfileName;

}

publicvoidsetFileName(StringfileName){

this.fileName=fileName;

}

publicStringgetFilepath(){

returnfilepath;

}

publicvoidsetFilepath(Stringfilepath){

this.filepath=filepath;

}

publicintgetComparestates(){

returncomparestates;

}

publicvoidsetComparestates(intcomparestates){

parestates=comparestates;

}

}

5.返回每一个apk文件的详细信息的类

packagecom.miki;

importjava.io.File;

importjava.lang.reflect.Constructor;

importjava.lang.reflect.Field;

importjava.lang.reflect.Method;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.content.pm.ApplicationInfo;

importandroid.content.pm.PackageInfo;

importandroid.content.pm.PackageManager;

importandroid.content.pm.PackageManager.NameNotFoundException;

importandroid.content.res.Resources;

importandroid.graphics.drawable.Drawable;

importandroid.os.Bundle;

importandroid.util.DisplayMetrics;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.ImageView;

publicclassGetIcon{

privateContextmcontext;

publicGetIcon(Contextc){

this.mcontext=c;

}

/**

*用于保存file的包名,图片,文件名,大小的类

*@authorli_k

*

*/

/**

*用来获取文件的包名,icon图片,包中包含的文件名,文件大小

*@paramfileFile类型文件

*@return返回一个ApkInfo类的数据,包含包名等4个属性

*/

publicApkInfoshowAPKIcon(Filefile){

StringapkPath=file.getPath();

StringPATH_PackageParser="android.content.pm.PackageParser";

StringPATH_AssetManager="android.content.res.AssetManager";

try{

//apk包的文件路径

//这是一个Package解释器,是隐藏的

//构造函数的参数只有一个,apk文件的路径

//PackageParserpackageParser=newPackageParser(apkPath);

ClasspkgParserCls=Class.forName(PATH_PackageParser);

Class[]typeArgs=newClass[1];

typeArgs[0]=String.class;

ConstructorpkgParserCt=pkgParserCls.getConstructor(typeArgs);

Object[]valueArgs=newObject[1];

valueArgs[0]=apkPath;

ObjectpkgParser=pkgParserCt.newInstance(valueArgs);

//Log.d("ANDROID_LAB","pkgParser:

"+pkgParser.toString());

//这个是与显示有关的,里面涉及到一些像素显示等等,我们使用默认的情况

DisplayMetricsmetrics=newDisplayMetrics();

metrics.setToDefaults();

//PackageParser.PackagemPkgInfo=packageParser.parsePackage(new

//File(apkPath),apkPath,

//metrics,0);

typeArgs=newClass[4];

typeArgs[0]=File.class;

typeArgs[1]=String.class;

typeArgs[2]=DisplayMetrics.class;

typeArgs[3]=Integer.TYPE;

MethodpkgParser_parsePackageMtd=pkgParserCls.getDeclaredMethod("parsePackage",

typeArgs);

valueArgs=newObject[4];

valueArgs[0]=newFile(apkPath);

valueArgs[1]=apkPath;

valueArgs[2]=metrics;

valueArgs[3]=0;

ObjectpkgParserPkg=pkgParser_parsePackageMtd.invoke(pkgParser,valueArgs);

//应用程序信息包,这个公开的,不过有些函数,变量没公开

//ApplicationInfoinfo=mPkgInfo.applicationInfo;

FieldappInfoFld=pkgParserPkg.getClass().getDeclaredField("applicationInfo");

ApplicationInfoinfo=(ApplicationInfo)appInfoFld.get(pkgParserPkg);

//uid输出为"-1",原因是未安装,系统未分配其Uid。

//ResourcespRes=getResources();

//AssetManagerassmgr=newAssetManager();

//assmgr.addAssetPath(apkPath);

//Resourcesres=newResources(assmgr,pRes.getDisplayMetrics(),

//pRes.getConfiguration());

ClassassetMagCls=Class.forName(PATH_AssetManager);

ConstructorassetMagCt=assetMagCls.getConstructor((Class[])null);

ObjectassetMag=assetMagCt.newInstance((Object[])null);

typeArgs=newClass[1];

typeArgs[0]=String.class;

MethodassetMag_addAssetPathMtd=assetMagCls.getDeclaredMethod("addAssetPath",

typeArgs);

valueArgs=newObject[1];

valueArgs[0]=apkPath;

assetMag_addAssetPathMtd.invoke(assetMag,valueArgs);

Resourcesres=mcontext.getResources();

typeArgs=newClass[3];

typeArgs[0]=assetMa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1