gpt4 book ai didi

java - 主页启动器强制停止后未收到 Android AppWidget 的按钮单击事件

转载 作者:搜寻专家 更新时间:2023-10-30 21:35:13 25 4
gpt4 key购买 nike

我有一个应用小部件,点击事件可以在我的提供商的 onUpdate() 中接收。
但是,当我尝试强制关闭主页启动器时,点击事件丢失了。
我什至在所有 onEnabled()onReceived() 等中都设置了断点:连接似乎丢失了。

因此,如何“重新连接”按钮事件?

WidgetProvider 扩展 AppWidgetProvider:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.d(TAG, "onUpdate()");
Log.d(TAG, "isLoading: " + CONSTANT.isLoading);
// update each of the widgets with the remote adapter from updateService
// Get all ids
ComponentName thisWidget = new ComponentName(context, ScoreWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

// Build the intent to call the service
Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

// Update the widgets via the service
context.startService(intent);

// super.onUpdate(context, appWidgetManager, appWidgetIds);
}

UpdateWidgetService 扩展服务:

@Override
public void onStart(Intent intent, int startId) {

Log.i(TAG, "Called");

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());

int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

for (int i = 0; i < appWidgetIds.length; ++i) {
// Here we setup the intent which points to the StackViewService which will
// provide the views for this collection.
Intent remoteViewsIntent = new Intent(this.getApplicationContext(), ScoreWidgetRemoteViewsService.class);
remoteViewsIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
// When intents are compared, the extras are ignored, so we need to embed the extras
// into the data so that the extras will not be ignored.
remoteViewsIntent.setData(Uri.parse(remoteViewsIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews rv = new RemoteViews(this.getApplicationContext().getPackageName(), R.layout.widget_layout);
rv.setRemoteAdapter(appWidgetIds[i], R.id.score_list, remoteViewsIntent);

// Set the empty view to be displayed if the collection is empty. It must be a sibling
// view of the collection view.
rv.setEmptyView(R.id.score_list, R.id.empty_view);

// Bind the click intent for the refresh button on the widget
final Intent refreshIntent = new Intent(this.getApplicationContext(), ScoreWidgetProvider.class);
refreshIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
refreshIntent.setAction(ScoreWidgetProvider.REFRESH_ACTION);
final PendingIntent refreshPendingIntent = PendingIntent
.getBroadcast(this.getApplicationContext(), 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.btn_refresh, refreshPendingIntent);

appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}

// stopSelf();

super.onStart(intent, startId);
}

最佳答案

确保您在 onStart 函数中使用了正确的上下文。查看代码的 onStart 部分中的 getApplicationContext,传入错误类型的上下文会导致错误。这是更多信息的链接:Context .

关于java - 主页启动器强制停止后未收到 Android AppWidget 的按钮单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com