Android 当应用程序被终止时,小部件 PendingIntent 停止工作

Android widget PendingIntent stop working when app is killed

我已经为这个问题寻找了一个星期的解决方案。

当我的应用 运行 在后台运行时,小部件上的 onclicks 事件按预期工作。 但是当应用程序关闭(被任务管理器杀死)时,小部件的 PendingIntents 停止工作。

怎么可能? 我想我已经正确创建了小部件提供程序。

少了什么?

有人可以帮助我吗?

这是我的代码:

- compileSdk 31
- minSdk 23
- targetSdk 31
- gradle -> "com.android.tools.build:gradle:7.0.4"

供应商class:

public class GPWidgetProvider extends AppWidgetProvider {

    private static RemoteViews getRemoteViews(Context context) {

        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
        Intent intentHome = new Intent(context, Home.class);
        intentHome.setData(Uri.parse(intentHome.toUri(Intent.URI_INTENT_SCHEME)));
        intentHome.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent homePendingIntent = PendingIntent.getActivity(context, 13, intentHome, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
        views.setOnClickPendingIntent(R.id.widget_image, homePendingIntent);

        return views;
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int appWidgetId : appWidgetIds) {
            RemoteViews views = getRemoteViews(context);
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

    public static void updateWidget(Context context) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        ComponentName widget = new ComponentName(context, GPWidgetProvider.class);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(widget);

        for (int appWidgetId : appWidgetIds) {
            RemoteViews views = getRemoteViews(context);
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}

清单:

<receiver
        android:name="<myPackage>.GPWidgetProvider"
        android:enabled="true"
        android:exported="true">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
        <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
    </intent-filter>
    <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_info" />
</receiver>

提前致谢。

如果某个应用程序被例如被杀死用户强制停止,应用程序中的所有服务、活动、通知和 PendingIntents 都将被取消。只有在您的应用下次运行时(从 activity 启动、接收广播等),您才有机会恢复。

这就是系统警告用户如果强制停止应用可能无法正常运行的原因。