Lai*_*uan 6 android widget android-widget
我阅读了hellowidget教程和开发指南'App Widgets.然后我知道如何创建一个包含按钮或文本或其他东西的小部件.
但我真正想做的是让它与我的应用程序进行交互.例如,我想创建一个具有文本视图的窗口小部件,当我单击它时,它会向我的活动发送一个PendingIntent,我可以在其中编辑文本.
我可以执行"发送PendingIntent"步骤.但是在我在acitivy中编辑文本后,小部件如何读取它?
Hen*_*cha 10
您需要做的是注册自定义意图,例如AppWidgetProvider中的ACTION_TEXT_CHANGED,例如:
public static final String ACTION_TEXT_CHANGED = "yourpackage.TEXT_CHANGED";
Run Code Online (Sandbox Code Playgroud)
在此之后,您需要在您的AndroidManifest.xml中注册您想要在接收器标签的intent-filter部分中接收此意图,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
然后你必须在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");
}
}
Run Code Online (Sandbox Code Playgroud)
完成上述所有操作后,您只需在文本更改后广播您的活动中的意图,如下所示:
Intent intent = new Intent(YourAppWidgetProvider.ACTION_TEXT_CHANGED);
intent.putExtra("NewString", textView.getText().toString());
getApplicationContext().sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
其中"NewString"应更改为您给出字符串的名称.
我希望它有所帮助.
您必须使用 RemoteViews 类来完成此操作。在 AppWidgetProvider 的 onRefresh 方法中创建 RemoteViews 类的实例并使用其中的方法...
RemoteViews views = RemoteViews(packageName, layoutId);
views.setOnClickPendingIntent(viewId, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
请注意,与标准应用程序视图相比,RemoteViews 的功能有限。但是,您可以利用他们提供的东西来实现您想做的事情。
| 归档时间: |
|
| 查看次数: |
4983 次 |
| 最近记录: |