【问题标题】:How to share data between activity and widget?如何在活动和小部件之间共享数据?
【发布时间】:2011-08-20 07:56:41
【问题描述】:

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

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

我可以执行“发送 PendingIntent”步骤。但是我在活动中编辑文本后,小部件如何读取它?

【问题讨论】:

    标签: android android-widget widget


    【解决方案1】:

    您需要做的是在您的 AppWidgetProvider 中注册一个自定义意图,例如 ACTION_TEXT_CHANGED,例如:

    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>
    

    然后你必须在你的 AppWidgetProvider 中扩展 onReceive 方法,并确保你处理你的意图是这样的:

    @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”更改为您为字符串提供的名称。

    希望对你有帮助。

    【讨论】:

    【解决方案2】:

    您必须使用 RemoteViews 类来执行此操作。在 AppWidgetProvider 的 onRefresh 方法中创建 RemoteViews 类的实例并使用其中的方法...

    RemoteViews views = RemoteViews(packageName, layoutId);
    views.setOnClickPendingIntent(viewId, pendingIntent);
    

    请注意,与标准应用程序视图相比,RemoteViews 的功能有限。但是,你可以用他们提供的东西来实现你想做的事情。

    【讨论】:

    • 我可以执行“发送 PendingIntent”步骤。你回答的是这一步。
    • 糟糕...然后,您必须从您的活动中广播另一个意图,您的小部件可以收听该意图。拥有 Intent 中的数据,小部件可以使用这些数据进行自我刷新。
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多