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

来源:互联网 发布:专业拍摄淘宝照片店 编辑:程序博客网 时间:2024/05/22 03:26

上代码:

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

 

原创粉丝点击