有这样的应用场景,apk安装成功后需要重启APP,就需要监听完成安装的回调或者广播
<receiver android:name=".receiver.UpdateReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
public class UpdateReceiver extends BroadcastReceiver {
private static final String TAG = "UpdateReceiver";
@Override public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_PACKAGE_REPLACED.equals(action) || Intent.ACTION_MY_PACKAGE_REPLACED.equals(
action)) {
try {
String scheme = intent.getScheme();
String packageName = intent.getData().getSchemeSpecificPart();
if (context.getPackageName().equals(packageName)) {
Toast.makeText(context, "成功升级新版本!", Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(context, FlashActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
LogMgr.d(TAG, "收到 ACTION_PACKAGE_REPLACED");
LogMgr.d(TAG, " scheme=" + scheme);
LogMgr.d(TAG, " schemeSpecificPart=" + packageName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
这里提供一个在开发过程中用到的一个静默安装的方法,不一定适用于所有的设备:
public static void silentInstallApkByReflect(String apkPath) {
PackageManager packageManager = ContextUtils.getContext().getPackageManager();
Class<?> pmClz = packageManager.getClass();
try {
if (Build.VERSION.SDK_INT >= 21) {
Class<?> aClass = Class.forName("android.app.PackageInstallObserver");
Constructor<?> constructor = aClass.getDeclaredConstructor();
constructor.setAccessible(true);
Object installObserver = constructor.newInstance();
Method method =
pmClz.getDeclaredMethod("installPackage", Uri.class, aClass, int.class, String.class);
method.setAccessible(true);
method.invoke(packageManager, Uri.fromFile(new File(apkPath)), installObserver, 2, null);
} else {
Method method = pmClz.getDeclaredMethod("installPackage", Uri.class,
Class.forName("android.content.pm.IPackageInstallObserver"), int.class, String.class);
method.setAccessible(true);
method.invoke(packageManager, Uri.fromFile(new File(apkPath)), null, 2, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
在Android开发中,当需要在APK安装成功后自动重启应用时,可以通过监听安装完成的广播来实现这一功能。本文将介绍一种适用于部分设备的静默安装方法。
665

被折叠的 条评论
为什么被折叠?



