【问题标题】:Android widget PendingIntent stop working when app is killed当应用程序被杀死时,Android 小部件 PendingIntent 停止工作
【发布时间】:2022-01-21 16:27:54
【问题描述】:

到现在为止,我一直在为这个问题寻找解决方案一个星期。

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

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

缺少什么?

有人可以帮我吗?

这是我的代码:

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

提供者类

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>

提前致谢。

【问题讨论】:

  • “怎么可能?” -- 这会发生在某些具有过于激进的任务管理器的设备上。
  • 您是否在多台设备上进行了测试并得到相同的结果?
  • 我在其他设备上检查过,问题仍然存在。

标签: android android-intent widget android-widget android-pendingintent


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多