当前位置: 代码迷 >> Android >> 适用于android1.5以上版本apk静默安装
  详细解决方案

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

热度:39   发布时间:2016-05-01 11:29:34.0
适用于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;			}		}	};}

?