Android 如何在活动和小部件之间共享数据?

Android 如何在活动和小部件之间共享数据?,android,android-widget,widget,Android,Android Widget,Widget,我阅读了hellowidget教程和开发指南的应用程序小部件。然后我知道如何创建包含按钮、文本或其他内容的小部件 但我真正想做的是让它与我的应用程序交互。例如,我想创建一个具有文本视图的小部件,当我单击它时,它会向我的活动发送一个PendingEvent,我可以在其中编辑文本 我可以做“发送一个悬挂的帐篷”这一步。但是在我在Activy中编辑文本之后,小部件如何读取它呢?您必须使用RemoteView类来执行此操作。在AppWidgetProvider的onRefresh方法内创建RemoteV

我阅读了hellowidget教程和开发指南的应用程序小部件。然后我知道如何创建包含按钮、文本或其他内容的小部件

但我真正想做的是让它与我的应用程序交互。例如,我想创建一个具有文本视图的小部件,当我单击它时,它会向我的活动发送一个PendingEvent,我可以在其中编辑文本


我可以做“发送一个悬挂的帐篷”这一步。但是在我在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”应更改为要提供字符串的名称


我希望这有帮助。

我可以执行“发送挂起的帐篷”这一步。您回答的是这一步。哦,好的。。。然后,您必须从您的活动中广播另一个意图,您的小部件可以收听该意图。你能帮助我吗?我在将我的数据从我的小部件传递到我的活动时遇到了问题。这是我的:谢谢。