第一步,注册升级App程序广播
<!-- App安装完成接收广播 -->
<receiver
android:name=".broadcast.UpdateReceiver"
android:enabled="true">
<intent-filter android:priority="100">
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
第二步,实现当前注册的这个广播
public class UpdateReceiver extends BroadcastReceiver {
private static final String TAG = UpdateReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
String packageName = intent.getDataString();
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {//接收升级广播
Logger.e(TAG, "onReceive:升级了一个安装包,重新启动此程序");
if (packageName.equals("package:" + SystemUtil.getPackageName())) {
RestartAPPTool.restartAPP(context);//升级完自身app,重启自身
}
} else if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {//接收安装广播
Logger.e(TAG, "onReceive:安装了" + packageName);
if (packageName.equals("package:" + SystemUtil.getPackageName())) {
/*SystemUtil.reBootDevice();*/
}
} else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) { //接收卸载广播
Logger.e(TAG, "onReceive:卸载了" + packageName);
}
}
}
附上app重启的代码:
/**
* 重启整个APP
* @param context
*/
public static void restartAPP(Context context){
Intent intent = context.getPackageManager()
.getLaunchIntentForPackage(KursaalApp.context.getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
ActManager.getAppManager().finishAllActivity();
}
最后再加个开机启动权限
<!-- 开机自启动权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />