适用于android1.5以下版本apk静默安装

上代码:

package com.forelid.ispa.support.utils;


import java.io.File;  

import java.io.FileNotFoundException;  

import java.io.FileOutputStream;  

import java.io.IOException;  

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.content.pm.ApplicationInfo;

import android.content.pm.PackageParser;

import android.net.Uri;  

import android.util.Log;  

import android.util.DisplayMetrics;

import android.content.pm.IPackageInstallObserver;  

import android.content.pm.IPackageDeleteObserver;  

import android.os.FileUtils;  

import android.os.Handler;

import android.os.Message;

 

public class PackageInstaller {  

	private File mTmpFile;

	private final int INSTALL_COMPLETE = 1;

	final static int SUCCEEDED = 1;

	final static int FAILED = 0;

	private final static String TAG = "PackInstaller";

	private Context mContext;

	private ApplicationInfo mAppInfo;

	public PackageInstaller(Context context) {

		mContext = context;

	}

	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) {

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

		int installFlags = 0;

		Uri mPackageURI = Uri.fromFile(new File(path));

		PackageParser.Package mPkgInfo = getPackageInfo(mPackageURI);

		mAppInfo = mPkgInfo.applicationInfo;

		String packageName = mAppInfo.packageName;

		Log.i(TAG, "====install packageName =" + packageName);

		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);

		}

 

		PackageInstallObserver observer = new PackageInstallObserver();

		pm.installPackage(mPackageURI, observer, installFlags,

		packageName);

	}

	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);

	} 

/*  

*  Utility method to get package information for a given packageURI           

*/

public  PackageParser.Package getPackageInfo(Uri packageURI) {

		final String archiveFilePath = packageURI.getPath();

		PackageParser packageParser = new PackageParser(archiveFilePath);

		File sourceFile = new File(archiveFilePath);

		DisplayMetrics metrics = new DisplayMetrics();

		metrics.setToDefaults();

		PackageParser.Package pkg = packageParser.parsePackage(sourceFile,

		archiveFilePath, metrics, 0);

		// Nuke the parser reference.

		packageParser = null;

		return pkg;

}

/*

* Utility method to get application information for a given packageURI

*/

public   ApplicationInfo getApplicationInfo(Uri packageURI) {

		final String archiveFilePath = packageURI.getPath();

		PackageParser packageParser = new PackageParser(archiveFilePath);

		File sourceFile = new File(archiveFilePath);

		DisplayMetrics metrics = new DisplayMetrics();

		metrics.setToDefaults();

		PackageParser.Package pkg = packageParser.parsePackage(sourceFile,
				archiveFilePath, metrics, 0);

		if (pkg == null) {

			return null;

		}

		return pkg.applicationInfo;

}

private Handler mHandler = new Handler() {

		public void handleMessage(Message msg) {

			switch (msg.what) {

			case INSTALL_COMPLETE:

				if (msg.arg1 == SUCCEEDED) {

				} else {
				}

				break;

			default:

				break;

			}

		}

	};

}

猜你喜欢

转载自zhtch-123.iteye.com/blog/1815668