使用 requestPinAppWidget() 放置小部件时如何启动小部件配置

问题描述 投票:0回答:1

现状

我的小部件使用配置活动来选择小部件类型.. 因此,每当我放置小部件(使用系统启动器)时,配置活动都会首先启动。它要求配置小部件,这是我的小部件所必需的。这很好用...

将小部件放置在主屏幕上的第二种方法是使用以下代码 `

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName myProvider = new ComponentName(context, ExampleAppWidgetProvider.class);

if (appWidgetManager.isRequestPinAppWidgetSupported()) {
    // Create the PendingIntent object only if your app needs to be notified
    // that the user allowed the widget to be pinned. Note that, if the pinning
    // operation fails, your app isn't notified. This callback receives the ID 
    // of the newly-pinned widget (EXTRA_APPWIDGET_ID).
    PendingIntent successCallback = PendingIntent.getBroadcast(
            /* context = */ context, 
            /* requestCode = */ 0,
            /* intent = */ new Intent(...), 
            /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT);

    appWidgetManager.requestPinAppWidget(myProvider, null, successCallback);
}

` 以上来自官方文档

我的代码是这样的

ComponentName mmwidgetProvider = new ComponentName(MainActivity.this, mm_WidgetAppWidgetProvider.class);
                if (mAppWidgetManager.isRequestPinAppWidgetSupported()) {
                    Intent pinnedWidgetCallbackIntent = new Intent(MainActivity.this, mm_WidgetAppWidgetProvider.class);
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,
                            pinnedWidgetCallbackIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);

                    mAppWidgetManager.requestPinAppWidget(mmwidgetProvider, null, pendingIntent);
                }

问题

但是问题是,当我执行这段代码时,小部件被放置在屏幕上但是 widgetConfig 活动没有启动所以我的小部件什么都不显示。小部件的数据完全取决于每次放置新小部件时需要初始化的配置活动。

请问有什么方法可以使用上面的代码,当我执行它时,我的小部件配置活动会启动,要求首先配置小部件。

非常感谢任何帮助 提前致谢。

java android widget android-appwidget
1个回答
0
投票

这个解决方案对我有用: 尝试将“getBroadcast”的使用替换为“getActivity”,看看它是否有效。在配置活动中更改 pinnedWidgetCallback Intent。

ComponentName mmwidgetProvider = new ComponentName(MainActivity.this, YourConfigurationScreenActivity.class);
            if (mAppWidgetManager.isRequestPinAppWidgetSupported()) {
                Intent pinnedWidgetCallbackIntent = new Intent(MainActivity.this, mm_WidgetAppWidgetProvider.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0,
                        pinnedWidgetCallbackIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);

                mAppWidgetManager.requestPinAppWidget(mmwidgetProvider, null, pendingIntent);
            }
© www.soinside.com 2019 - 2024. All rights reserved.