Android - AppWidget pendingintent 不触发

标签 android android-widget

我有一个应用程序小部件,其布局中有一个按钮。 单击按钮时,会触发调用我的广播接收器的 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/

相关文章:

android - 如何使用 ffmpeg/libavcodec/libstagefright

带有俄语文本格式错误的android webview

Android AppCompatRadioButton 圆圈未显示

Android:垂直画廊?

java - 将目录和文件从 res/raw 文件夹复制到 SD 卡 - android

小部件的Android菜单

安卓工作室 :EditText editable is deprecated How to use inputType

android - Mono Android 双指缩放同时覆盖 ondraw

java - 尝试找出该方法不起作用的原因

Android appwidget 服务无法启动