Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-应用程序小部件在应用程序重新启动时不能使用挂起的意图_Android_Widget_Broadcastreceiver - Fatal编程技术网

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,现在,单击应用程序小部件什么也不做

应用程序小部件仍然可以手动更新,例如,从活动中更新。但点击它不会导致:

  • 正在发送的操作\u启用\u禁用广播。 或
  • 我的应用程序小部件接收此广播
  • 当我在logcat中查看时,会发生以下情况之一,并且在小部件的“onReceive”方法中使用log.d记录的消息不会出现

    为什么呢?我是否需要在发送广播时指定任何特殊内容,或者在清单中的接收方声明中指定任何内容

    说到这里,当应用程序小部件中的视图被单击时(而不是我的方法),有没有更好的方法可以用来执行您自己的代码


    多谢各位

    这些天我遇到了同样的问题。我在几个设备上测试了我的应用程序,有些设备有这个问题,有些没有。然后我发现,如果您在TaskManager中终止小部件的进程(第一个,X),那么下次创建小部件时,它就会正常工作。 这就是我的解决方案。 在onDisable()函数中添加以下代码

    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);
    

    当您删除小部件时,它会自动终止。因此,下次您创建它时,它将正常工作。

    我很久以前就解决了我的问题(删除了该服务并创建了另一个
    BroadcastReceiver
    来接收广播,它确实解决了问题。我知道,如果您删除/禁用小部件并重新添加它,它会正常工作。但这不是我的问题:(小部件根本不会被禁用。