package cm.android.common.pm; import android.content.Context; import android.content.pm.PackageInfo; import android.net.Uri; import cm.android.applications.AppUtil; import cm.java.thread.ThreadUtil; import cm.java.util.Singleton; import static okhttp3.internal.Internal.instance; /** * PackageManager适配器 */ public final class MyPackageManager { private static final Singleton<MyPackageManager> singleton = new Singleton<MyPackageManager>() { @Override protected MyPackageManager create() { return new MyPackageManager(); } }; public static MyPackageManager getInstance() { return singleton.get(); } private MyPackageManager() { } public void installPackage(final Context context, final Uri packageURI, final InstallObserver observer) { ThreadUtil.newCachedThreadPool().submit(new Runnable() { @Override public void run() { int returnCode = PackageUtil.install(context, packageURI.getPath()); if (null != observer) { // 获取安装包信息 String archiveFilePath = packageURI.getPath(); PackageInfo packageInfo = AppUtil.getArchiveInfo(context.getPackageManager(), archiveFilePath, 0); String packageName = ""; if (packageInfo != null) { packageName = packageInfo.packageName; } observer.packageInstalled(packageName, returnCode); } } }); } public void deletePackage(final Context context, final String packageName, final DeleteObserver observer) { ThreadUtil.newCachedThreadPool().submit(new Runnable() { @Override public void run() { int returnCode = PackageUtil.uninstall(context, packageName); if (null != observer) { observer.packageDeleted(packageName, returnCode); } } }); } } abstract class InstallObserver { public abstract void packageInstalled(String packageName, int returnCode); } abstract class DeleteObserver { public abstract void packageDeleted(String packageName, int returnCode); }