编辑:
好的,所以你设置了一个获取广播按钮上的 PendingIntent设置OnClickPendingIntent并使用来自接收器的新文本执行更新(或调用更新方法)。你的应用程序窗口小部件提供者类可以是你的接收者(你可以在接收时),否则您将创建一个扩展的新类广播接收器.
编辑2(示例代码):
我没有运行/编译这段代码,所以希望它不会有错误。
这是一个简单的帮助器方法,用于通过自定义操作获取基本的更新挂起意图:
public PendingIntent getRefreshPendingIntent(Context context, int appWidgetId){
Intent intent = new Intent("my.package.ACTION_UPDATE_WIDGET");
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
在重写的 AppWidgetProvider 类中捕获 onReceive 中的自定义操作
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
//handle other appwidget actions
if (intent.getAction().equals("my.package.ACTION_UPDATE_WIDGET")) {
//some code here that will update your widget
}
//handle other appwidget actions
}
您还需要将自定义操作的 IntentFilter 添加到 appwidget 接收器声明中的清单中
<receiver
android:name="my.package.MyWidgetProviderClass"
android:label="MyWidget">
<intent-filter>
<action android:name="my.package.ACTION_UPDATE_WIDGET"/>
<!-- other intent filters -->
</intent-filter>
<!-- meta data pointing to widget xml file -->
</receiver>
最后,您将挂起的意图应用到您正在构建的 RemoteViews 上,这样当单击按钮时,它将发送 my.package.ACTION_UPDATE_WIDGET 操作,该操作将被您的 AppWidgetProvider 捕获,您可以在其中(或调用一个方法)执行您的 AppWidget 更新
myRemoteViews.setOnClickPendingIntent(R.id.id_of_update_button, getRefreshPendingIntent(context, appWidgetId);