包是目前冻结时,我试图自动更新应用程序- Android



我正在尝试创建一个使用BroadcastReceiver来控制状态安装的自动更新应用程序:

一切正常。但是我想重新更新后的应用程序。

当我尝试这样做时,我得到以下错误:

Failure starting process com.artech.logitrans16.logitransapp
java.lang.SecurityException: Package com.artech.logitrans16.logitransapp is currently frozen!
at com.android.server.pm.PackageManagerService.checkPackageStartable(PackageManagerService.java:4057)
at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:4263)
at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:4228)
at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:4210)
at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:4096)
at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1730)
at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2804)
at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2319)
at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2249)
at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2233)
at com.android.server.am.ActivityManagerService.handleAppDiedLocked(ActivityManagerService.java:6000)
at com.android.server.am.ActivityManagerService.removeProcessLocked(ActivityManagerService.java:7586)
at com.android.server.am.ActivityManagerService.killPackageProcessesLocked(ActivityManagerService.java:7223)
at com.android.server.am.ActivityManagerService.forceStopPackageLocked(ActivityManagerService.java:7360)
at com.android.server.am.ActivityManagerService$MainHandler.handleMessage(ActivityManagerService.java:2318)

这是BroadcastReceiver部分代码:

private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceive(Context context, Intent intent) {
//aca manejo el estado de la instalación
String action = intent.getAction();
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator + "APP_GSOFT");
Bundle extras = intent.getExtras();
String errores = extras.getString(PackageInstaller.EXTRA_STATUS_MESSAGE);
if (ACTION_INSTALL_COMPLETE.equals(action)) {
int result = intent.getIntExtra(PackageInstaller.EXTRA_STATUS,
PackageInstaller.STATUS_FAILURE);
switch (result) {
case PackageInstaller.STATUS_PENDING_USER_ACTION:
startActivity((Intent) intent.getParcelableExtra(Intent.EXTRA_INTENT));
break;
//Si se instaló correcto, reinicio la app con el nombre del packge
case PackageInstaller.STATUS_SUCCESS:
PackageManager s;
s = getPackageManager();
Intent launchhhh;
launchhhh = s.getLaunchIntentForPackage(nombrePackage);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId, launchhhh, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 10000, mPendingIntent);
UpdateApp.this.finishAndRemoveTask();
System.exit(0);
break;
case PackageInstaller.STATUS_FAILURE_ABORTED:                       
borrarRecursivo(f);
Toast.makeText(context.getApplicationContext(), "Cancelado por el usuario", Toast.LENGTH_LONG).show();
System.out.println("Cancelado por el usuario!");
UpdateApp.this.finish();
System.exit(0);
break;
//En cualquier otra situacion, borro el APK
default:
borrarRecursivo(f);
System.out.println("Errores: "+errores);
UpdateApp.this.finish();
break;
}
}
}
};

我正在尝试在10秒后重新打开应用程序

我试图使用FLAG_CANCEL_CURRENT标志,但我得到了同样的错误。

我只想重新打开应用程序。

我也面临同样的问题,并希望在自动更新后重新启动我的应用程序。

找到解决方案:

假设您正在使用PackageManager安装您自己的应用程序。你可以使用PackageManager在更新应用后触发任何你想要的意图。因此,在提交会话之前,我做了以下操作:

Intent intent = context.getPackageManager().getLaunchIntentForPackage("my.package.name");
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
session.commit(pendingIntent.getIntentSender());

my.package.name替换为您的包名。使用这个,它会在更新后重新启动。

最新更新