我有一个应用程序小部件,其布局中有一个按钮。 单击按钮时,会触发调用我的广播接收器的 Intent 。
它工作得很好,但有时,在使用任务管理器中的“清除内存”按钮后,小部件会卡住 - 单击它没有任何反应。但如果它正在运行,它仍然可以从我的应用程序接收更新。
我不确定未触发未决 Intent 是内存清除错误还是我的错。 无论如何,这是代码:
注册挂起的 Intent (应用小部件的 onUpdate 方法)
Intent intent = new Intent(context, ServiceControl.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget);
views.setOnClickPendingIntent(R.id.appwidgetbutton, pendingIntent);
然后用 View 更新小部件。
这是应用小部件提供者的声明:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dp"
android:minHeight="72dp"
android:initialLayout="@layout/appwidget"
android:updatePeriodMillis="0">
</appwidget-provider>
我不希望系统调用小部件更新,我只从我的应用程序本身更新它。
那么为什么挂起的 Intent 停止触发?
提前致谢。
最佳答案
@钟
@CommonsWare
大家好,我知道了。 Ofc 这是一个 Android 问题,接收者应该总是收到。 现在如何绕过它?显然所有的小部件都在工作,所以一定有一个简单的东西。
我在某个地方读到 SO(试图找到那个人)提醒我们所有人,小部件类实际上是在扩展 BroadcastReceiver。
因此,您可以注册小部件(在 list 中)以接收威胁本身。因此,整个系统在 AppWidgetProvider 的类实例中是自包含的。
现在,为了与应用程序进行通信,您可以在 onReceive 中调用应用程序的任何静态类,如果应用程序处于 Activity 状态,LocalBroadcastManager 将不会失败。如果它未激活,您的按钮无论如何都应该开始 Activity !
如果你想要代码,我可以详细说明。
关于Android - AppWidget pendingintent 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7843778/