现状
我的小部件使用配置 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/