android如何在应用程序内存中安装应用程序

android如何在应用程序内存中安装应用程序,android,Android,下面是我的代码,它提供SD卡中的所有应用程序,并安装在手机内存中,但我想在我的应用程序内存中安装选定的应用程序,因此当用户卸载应用程序时,此应用程序列表中用户安装的所有应用程序也将被删除,我该怎么办?请帮帮我 package com.gfsmart.filemanager; import android.widget.Button; import android.widget.ListView; import android.widget.TextView;

下面是我的代码,它提供SD卡中的所有应用程序,并安装在手机内存中,但我想在我的应用程序内存中安装选定的应用程序,因此当用户卸载应用程序时,此应用程序列表中用户安装的所有应用程序也将被删除,我该怎么办?请帮帮我

           package com.gfsmart.filemanager;


  import android.widget.Button;
  import android.widget.ListView;
  import android.widget.TextView;

     public class SdcardAPkMgr extends ListActivity {
DatabaseHandler db;
private List<FileInformation> files_list;
private ProgressDialog mLoadDialog;
private Handler handler;
private static final int SCAN_APK_START = 101;
private static final int SCAN_APK_COMLETED = 102;
private boolean mJustCreate = true;
public static String yahoo;


/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.apk_list);
    files_list = new ArrayList<FileInformation>();
      db = new DatabaseHandler(this);
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    setupBatchHandler();
    if (mJustCreate) {
        thread.start();
    }
    mJustCreate = false;
}

private void setupBatchHandler() {
    // TODO Auto-generated method stub
    handler = new Handler() {
        // @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case SCAN_APK_START: {
                mLoadDialog = 
      ProgressDialog.show(SdcardAPkMgr.this, "",
                        getString(R.string.scan_apk_info));
                mLoadDialog.setCancelable(false);
                break;
            }
            case SCAN_APK_COMLETED: {
                ApkListAdapter adapter = new ApkListAdapter(
                        SdcardAPkMgr.this, files_list);
                SdcardAPkMgr.this.setListAdapter(adapter);
                mLoadDialog.dismiss();
                break;
            }
            default:
                break;
            }
            super.handleMessage(msg);
        }
    };
}

Thread thread = new Thread(new Runnable() {

    public void run() {
        // TODO Auto-generated method stub
        handler.sendEmptyMessage(SCAN_APK_START);
        getAllApkFiles(new File("/sdcard"));
        handler.sendEmptyMessage(SCAN_APK_COMLETED);
    }
});

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    FileInformation information = files_list.get(position);
     Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(information.getPath())), 
  "application/" +
                        "vnd.android.package-archive");
        this.startActivity(intent);
}

public Drawable getAPKDrawable(String filePath) {
    Drawable dr = null;
    if (filePath != null) {

        String PATH_PackageParser = "android.content.pm.PackageParser";
        String PATH_AssetManager = "android.content.res.AssetManager";
        try {
            Class pkgParserCls = Class.forName(PATH_PackageParser);
            Class[] typeArgs = new Class[1];
            typeArgs[0] = String.class;
            Constructor pkgParserCt = 
       pkgParserCls.getConstructor(typeArgs);
            Object[] valueArgs = new Object[1];
            valueArgs[0] = filePath;
            Object pkgParser = pkgParserCt.newInstance(valueArgs);
            DisplayMetrics metrics = new DisplayMetrics();
            metrics.setToDefaults();
            // PackageParser.Package mPkgInfo =
            // packageParser.parsePackage(new
            // File(apkPath), apkPath,
            // metrics, 0);
            typeArgs = new Class[4];
            typeArgs[0] = File.class;
            typeArgs[1] = String.class;
            typeArgs[2] = DisplayMetrics.class;
            typeArgs[3] = Integer.TYPE;
            Method pkgParser_parsePackageMtd = pkgParserCls
                    .getDeclaredMethod("parsePackage", 
           typeArgs);
            valueArgs = new Object[4];
            valueArgs[0] = new File(filePath);
            valueArgs[1] = filePath;
            valueArgs[2] = metrics;
            valueArgs[3] = 0;
            Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(
                    pkgParser, valueArgs);
            Field appInfoFld = 
      pkgParserPkg.getClass().getDeclaredField(
                    "applicationInfo");
            ApplicationInfo info = (ApplicationInfo) appInfoFld 
        .get(pkgParserPkg);

            Class assetMagCls = Class.forName(PATH_AssetManager);
            Constructor assetMagCt = assetMagCls
                    .getConstructor((Class[]) null);
            Object assetMag = assetMagCt.newInstance((Object[]) null);
            typeArgs = new Class[1];
            typeArgs[0] = String.class;
            Method assetMag_addAssetPathMtd = assetMagCls
                    .getDeclaredMethod("addAssetPath", 
          typeArgs);
            valueArgs = new Object[1];
            valueArgs[0] = filePath;
            assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);
            Resources res = getResources();
            typeArgs = new Class[3];
            typeArgs[0] = assetMag.getClass();
            typeArgs[1] = res.getDisplayMetrics().getClass();
            typeArgs[2] = res.getConfiguration().getClass();
            Constructor resCt = 
                        Resources.class.getConstructor(typeArgs);
            valueArgs = new Object[3];
            valueArgs[0] = assetMag;
            valueArgs[1] = res.getDisplayMetrics();
            valueArgs[2] = res.getConfiguration();
            res = (Resources) resCt.newInstance(valueArgs);
            String label = null;
            if (info.labelRes != 0) {
                label = (String) res.getText(info.labelRes);
                Log.d("Insert: ", "Inserting ..");
        //      db.deleteContact();
                db.addContact(new Contact(label));
package com.gfsmart.filemanager;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
公共类SdcardAPkMgr扩展了ListActivity{
数据库处理程序数据库;
私有列表文件\u列表;
私有进程对话框;
私人经办人;
专用静态最终整数扫描\u APK\u START=101;
专用静态最终整数扫描\u APK\u COMPLETED=102;
私有布尔值mJustCreate=true;
公共静态字符串;
/**在首次创建活动时调用*/
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.apk_列表);
files_list=new ArrayList();
db=新的DatabaseHandler(此);
}
@凌驾
受保护的void onResume(){
//TODO自动生成的方法存根
super.onResume();
setupBatchHandler();
如果(mJustCreate){
thread.start();
}
mJustCreate=false;
}
私有void setupBatchHandler(){
//TODO自动生成的方法存根
handler=newhandler(){
//@覆盖
公共无效handleMessage(消息消息消息){
开关(msg.what){
案例扫描\u APK\u开始:{
MLOADDALOG=
ProgressDialog.show(SdcardAPkMgr.this,“,
getString(R.string.scan_apk_info));
mLoadDialog.setCancelable(false);
打破
}
案例扫描已完成:{
ApkListAdapter适配器=新的ApkListAdapter(
SdcardAPkMgr.this,文件列表);
SdcardAPkMgr.this.setListAdapter(适配器);
mLoadDialog.dismise();
打破
}
违约:
打破
}
超级handleMessage(msg);
}
};
}
Thread Thread=新线程(new Runnable(){
公开募捐{
//TODO自动生成的方法存根
handler.sendEmptyMessage(扫描APK启动);
getAllApkFiles(新文件(“/sdcard”);
handler.sendEmptyMessage(已完成扫描);
}
});
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
FileInformation=files\u list.get(位置);
意向意向=新意向(意向.行动\视图);
intent.setDataAndType(Uri.fromFile(新文件(information.getPath())),
“应用程序/”+
“vnd.android.package归档文件”);
这一点。触觉(意图);
}
公共可绘制getAPKDrawable(字符串文件路径){
可绘制dr=null;
if(filePath!=null){
字符串路径_PackageParser=“android.content.pm.PackageParser”;
字符串路径_AssetManager=“android.content.res.AssetManager”;
试一试{
类pkgParserCls=Class.forName(路径\ PackageParser);
Class[]typeArgs=新类[1];
typeArgs[0]=String.class;
构造函数pkgParserCt=
pkgParserCls.getConstructor(typeArgs);
Object[]valueArgs=新对象[1];
valueArgs[0]=文件路径;
对象pkgParser=pkgParserCt.newInstance(valueArgs);
DisplayMetrics=新的DisplayMetrics();
metrics.setToDefaults();
//PackageParser.packagempkginfo=
//packageParser.parsePackage(新
//文件(apkPath)、apkPath、,
//指标,0);
typeArgs=新类[4];
typeArgs[0]=File.class;
typeArgs[1]=String.class;
typeArgs[2]=DisplayMetrics.class;
typeArgs[3]=Integer.TYPE;
方法pkgParser_parsePackageMtd=pkgParserCls
.getDeclaredMethod(“parsePackage”,
类型参数);
valueArgs=新对象[4];
valueArgs[0]=新文件(filePath);
valueArgs[1]=文件路径;
valueArgs[2]=度量;
valueArgs[3]=0;
对象pkgParserPkg=pkgParser_parsePackageMtd.invoke(
pkgParser,valueArgs);
字段appInfoFld=
pkgParserPkg.getClass().getDeclaredField(
“应用信息”);
ApplicationInfo信息=(ApplicationInfo)appInfoFld
.get(pkgParserPkg);
Class AssetMacls=Class.forName(路径\ AssetManager);
构造函数assetMagCt=assetMagCls
.getConstructor((类[])null);
Object assetMag=assetMagCt.newInstance((Object[])null;
typeArgs=新类[1];
typeArgs[0]=String.class;
方法assetMag\u addAssetPathMtd=assetmagls
.getDeclaredMethod(“addAssetPath”),
类型参数);
valueArgs=新对象[1];
valueArgs[0]=文件路径;
assetMag_addAssetPath.invoke(assetMag,valueArgs);
Resources res=getResources();
typeArgs=新类[3];
typeArgs[0]=assetMag.getClass();
typeArgs[1]=res.getDisplayMetrics().getClass();
typeArgs[2]=res.getConfiguration().getClass();
构造函数resCt=
Resources.class.getConstructor(typeArgs);
valueArgs=新对象[3];
valueArgs[0]=资产标记;
valueArgs[1]=res.getDisplayMetrics();
valueArgs[2]=res.getConfiguration();
res=(资源)resCt.newInstance(valueArgs);
字符串标签=null;
如果(info.labelRes!=0){
label=(String)res.getText(info.labelRes);
日志d(“插入:”,“插入..”);
//db.deleteC