Android-应用程序小部件在应用程序重新启动时不能使用挂起的意图
除了活动之外,我的应用程序还有一个服务和一个应用程序小部件 我希望单击这些小部件会导致一段代码执行,这段代码将启用/禁用应用程序的服务。 因此,单击应用程序小部件会启动一个挂起的意图,其构建方式如下:Android-应用程序小部件在应用程序重新启动时不能使用挂起的意图,android,widget,broadcastreceiver,Android,Widget,Broadcastreceiver,除了活动之外,我的应用程序还有一个服务和一个应用程序小部件 我希望单击这些小部件会导致一段代码执行,这段代码将启用/禁用应用程序的服务。 因此,单击应用程序小部件会启动一个挂起的意图,其构建方式如下: Intent intent = new Intent(ACTION_ENABLE_DISABLE); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); (当然,操作\启用\禁用由我定义
Intent intent = new Intent(ACTION_ENABLE_DISABLE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
(当然,操作\启用\禁用由我定义。)
在清单中,我在意图过滤器中指定了这个操作
然后,我重写了onReceive方法,如果intent的操作是action\u ENABLE\u DISABLE,我将执行启用/禁用服务的代码段。
如果不是,我会调用super.onReceive,这样就可以完成正常的应用程序小部件广播
到目前为止还不错!小部件工作正常
但是,假设我在应用程序的PID为X时创建了它。
然后,用户离开了我的活动并将其销毁;因此,就服务而言,假设用户关闭了它。
因此,我的流程不承载任何活动或服务—它被销毁/从任务管理器中退出,这两种情况都是相关的。
下次创建它时,它有一个不同的PID,现在,单击应用程序小部件什么也不做
应用程序小部件仍然可以手动更新,例如,从活动中更新。但点击它不会导致:
多谢各位 这些天我遇到了同样的问题。我在几个设备上测试了我的应用程序,有些设备有这个问题,有些没有。然后我发现,如果您在TaskManager中终止小部件的进程(第一个,X),那么下次创建小部件时,它就会正常工作。 这就是我的解决方案。 在onDisable()函数中添加以下代码
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
当您删除小部件时,它会自动终止。因此,下次您创建它时,它将正常工作。我很久以前就解决了我的问题(删除了该服务并创建了另一个
BroadcastReceiver
来接收广播,它确实解决了问题。我知道,如果您删除/禁用小部件并重新添加它,它会正常工作。但这不是我的问题:(小部件根本不会被禁用。