Android 如何在活动和小部件之间共享数据?
我阅读了hellowidget教程和开发指南的应用程序小部件。然后我知道如何创建包含按钮、文本或其他内容的小部件 但我真正想做的是让它与我的应用程序交互。例如,我想创建一个具有文本视图的小部件,当我单击它时,它会向我的活动发送一个PendingEvent,我可以在其中编辑文本Android 如何在活动和小部件之间共享数据?,android,android-widget,widget,Android,Android Widget,Widget,我阅读了hellowidget教程和开发指南的应用程序小部件。然后我知道如何创建包含按钮、文本或其他内容的小部件 但我真正想做的是让它与我的应用程序交互。例如,我想创建一个具有文本视图的小部件,当我单击它时,它会向我的活动发送一个PendingEvent,我可以在其中编辑文本 我可以做“发送一个悬挂的帐篷”这一步。但是在我在Activy中编辑文本之后,小部件如何读取它呢?您必须使用RemoteView类来执行此操作。在AppWidgetProvider的onRefresh方法内创建RemoteV
我可以做“发送一个悬挂的帐篷”这一步。但是在我在Activy中编辑文本之后,小部件如何读取它呢?您必须使用RemoteView类来执行此操作。在AppWidgetProvider的onRefresh方法内创建RemoteView类的实例,并使用其中的方法
RemoteViews views = RemoteViews(packageName, layoutId);
views.setOnClickPendingIntent(viewId, pendingIntent);
请注意,与标准应用程序视图相比,RemoteView的功能有限。但是,你可以用他们提供的东西实现你想做的事情 您需要做的是注册一个自定义意图,例如,在AppWidgetProvider中更改的操作\u文本\u如下所示,例如:
public static final String ACTION_TEXT_CHANGED = "yourpackage.TEXT_CHANGED";
在此之后,您需要在AndroidManifest.xml中注册,以便在接收方标记的意图过滤器部分接收此意图,如下所示:
<receiver android:name=".DrinkWaterAppWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="yourpackage.TEXT_CHANGED" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals(ACTION_TEXT_CHANGED)) {
// handle intent here
String s = intent.getStringExtra("NewString");
}
}
Intent intent = new Intent(YourAppWidgetProvider.ACTION_TEXT_CHANGED);
intent.putExtra("NewString", textView.getText().toString());
getApplicationContext().sendBroadcast(intent);
设置完以上所有内容后,您只需在文本发生如下更改后,在活动中广播意图:
<receiver android:name=".DrinkWaterAppWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="yourpackage.TEXT_CHANGED" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals(ACTION_TEXT_CHANGED)) {
// handle intent here
String s = intent.getStringExtra("NewString");
}
}
Intent intent = new Intent(YourAppWidgetProvider.ACTION_TEXT_CHANGED);
intent.putExtra("NewString", textView.getText().toString());
getApplicationContext().sendBroadcast(intent);
其中“NewString”应更改为要提供字符串的名称
我希望这有帮助。我可以执行“发送挂起的帐篷”这一步。您回答的是这一步。哦,好的。。。然后,您必须从您的活动中广播另一个意图,您的小部件可以收听该意图。你能帮助我吗?我在将我的数据从我的小部件传递到我的活动时遇到了问题。这是我的:谢谢。