Android回顾之静默安装

来源:互联网 发布:ubuntu 14.04 qq 2015 编辑:程序博客网 时间:2024/05/22 04:33

应用有时候会需要静默安装一些应用(你们懂得!)。

但是 PackageManager.installPackage方法被隐藏了,需要反射调用。

// 静默安装public static void staticInstall(File fp, String packageName,IPackageInstallObserver callback,Context context) {PackageManager pm = context.getPackageManager();int flags = 0;Class<? extends PackageManager> o = pm.getClass();Field[] fields = o.getFields();for (Field f : fields) {if (f.getName().equals("INSTALL_INTERNAL")) {try {flags = f.getInt(pm);} catch (IllegalAccessException e) {e.printStackTrace();return;}break;}}Method[] methods = o.getMethods();Uri uri = Uri.fromFile(fp);for (Method m : methods) {if (m.getName().equals("installPackage")) {try {m.setAccessible(true);m.invoke(pm, new Object[] { uri, callback, flags, packageName });} catch (IllegalArgumentException e) {Log.d("chen", "IllegalArgumentException err=" + e.getMessage());e.printStackTrace();return;} catch (IllegalAccessException e) {e.printStackTrace();Log.d("chen", "IllegalAccessException err=" + e.getMessage());return;} catch (InvocationTargetException e) {Log.d("chen", "InvocationTargetException err=" + e.getMessage());e.printStackTrace();return;}break;}}Log.d("CreateInstall", "OK");};

安装完成回调需要继承自IPackageInstallObserver.Stub的类来完成。

0 0