默认卸载、安装程序

  1. package cn.ceadic.apkmgr;
  2. import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
  3. import android.content.Context;
    import android.content.Intent;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.net.Uri;
    import android.util.Log;
  4. import android.content.pm.IPackageInstallObserver;
    import android.content.pm.IPackageDeleteObserver;
    import android.os.FileUtils;

  5. public class PackageInstaller {
     
     private File mTmpFile;
     private final String TMP_FILE_NAME = "tmpCopy.apk";
  6.  private final static String TAG = "PackInstaller";
     private Context mContext;
  7.  public PackageInstaller(Context context) {
      mContext = context;
     }
  8.  
     public void install(String path,String packageName){
       Intent intent = new Intent(Intent.ACTION_VIEW);
       intent.setDataAndType(Uri.fromFile(new File(path)),
       "application/vnd.android.package-archive");
       mContext.startActivity(intent);
     }
     
     public void instatllBatch(String path, String packageName) {
  9.   Log.i(TAG, "path=" + path);
      int installFlags = 0;
      PackageManager pm = mContext.getPackageManager();
      try {
       PackageInfo pi = pm.getPackageInfo(packageName,
         PackageManager.GET_UNINSTALLED_PACKAGES);
       if (pi != null) {
        installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
       }
      } catch (NameNotFoundException e) {
      }
      if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
       Log.w(TAG, "Replacing package:" + packageName);
      }
  10.   // Create temp file before invoking install api
      mTmpFile = createTempPackageFile(path);
      if (mTmpFile == null) {
       // Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
       // msg.arg1 = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
       // mHandler.sendMessage(msg);
       return;
      }
      Uri mPackageURI = Uri.parse("file://" + mTmpFile.getPath());
      String installerPackageName = mContext.getIntent().getStringExtra(
        Intent.EXTRA_INSTALLER_PACKAGE_NAME);
  11.   PackageInstallObserver observer = new PackageInstallObserver();
      pm.installPackage(mPackageURI, observer, installFlags,
        installerPackageName);
     }
  12.  private File createTempPackageFile(String filePath) {
      File tmpPackageFile = mContext.getFileStreamPath(TMP_FILE_NAME);
      if (tmpPackageFile == null) {
       Log.w(TAG, "Failed to create temp file");
       return null;
      }
      if (tmpPackageFile.exists()) {
       tmpPackageFile.delete();
      }
      // Open file to make it world readable
      FileOutputStream fos;
      try {
       fos = openFileOutput(TMP_FILE_NAME, MODE_WORLD_READABLE);
      } catch (FileNotFoundException e1) {
       Log.e(TAG, "Error opening file " + TMP_FILE_NAME);
       return null;
      }
      try {
       fos.close();
      } catch (IOException e) {
       Log.e(TAG, "Error opening file " + TMP_FILE_NAME);
       return null;
      }
  13.   File srcPackageFile = new File(filePath);
      if (!FileUtils.copyFile(srcPackageFile, tmpPackageFile)) {
       Log.w(TAG, "Failed to make copy of file: " + srcPackageFile);
       return null;
      }
      return tmpPackageFile;
     }
  14.  private class PackageInstallObserver extends IPackageInstallObserver.Stub {
      public void packageInstalled(String packageName, int returnCode) {
       // Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
       // msg.arg1 = returnCode;
       // mHandler.sendMessage(msg);
       Log.i(TAG, "====INSTALL_COMPLETE");
      }
     }
     
     private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
            public void packageDeleted(boolean succeeded) {
    //            Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE);
    //            msg.arg1 = succeeded?SUCCEEDED:FAILED;
    //            mHandler.sendMessage(msg);
                Log.i(TAG, "====UNINSTALL_COMPLETE");
            }
        }
       
        public void uninstall(String packageName){
         Uri packageURI = Uri.parse("package:" + packageName);
      Intent uninstallIntent = new Intent(Intent.ACTION_DELETE,
      packageURI);
      mContext.startActivity(uninstallIntent);
     }
     
     public void uninstallBatch(String packageName) {
         PackageDeleteObserver observer = new PackageDeleteObserver();
            mContext.getPackageManager().deletePackage(packageName, observer, 0);
      
     }
    }

 

 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
 <uses-permission android:name="android.permission.DELETE_PACKAGES" />
 <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />

转载于:https://my.oschina.net/u/267190/blog/74959

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值