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

标签 java android widget android-appwidget

现状

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

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

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);
}

` 以上来自official docs

我的代码是这样的

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 Activity 未启动,因此我的小部件什么也没有显示。小部件的数据完全取决于配置 Activity ,每次放置新小部件时都需要初始化配置 Activity 。

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

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

最佳答案

这个解决方案对我有用: 尝试将“getBroadcast”的使用替换为“getActivity”,看看是否有效。在配置 Activity 中更改 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);
            }

关于java - 使用 requestPinAppWidget() 放置小部件时如何启动小部件配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74953434/

相关文章:

java - Arduino CRC计算和串口读取

java - 二叉搜索树中的节点删除

使用半粗体样式的 Android 可下载字体

jquery - 使用 Backbone.js 的数据表/网格小部件

python - 在 kivy 中嵌套小部件

qt - 如何使两个并排的 Qt Windows 保持粘性并表现得像一个窗口?

java - Android离线模式(应用上线时同步数据)

java - 如何强制操作系统给java更多内存?

java - TextView 到字符串

java - 重启安卓服务