首次添加到主屏幕时,需要配置我的应用小部件.我想在用户添加小部件后立即打开配置视图.
AppWidgetProvider没有onCreated事件,所以我在事件上显示了一个混淆活动onUpdate,并在SharedConfiguration其中存储一个布尔值,表示配置已经显示.有没有更简单的方法?
我正在做一些 Android 练习,但我在小部件方面遇到了问题:
目标:当用户将新的小部件添加到主页时,应用程序运行一个配置,用户可以在其中选择一个字符串。在配置过程中,必须将该字符串设置为小部件布局内唯一按钮的“文本”,并且在该按钮上应用程序必须设置一个 onclick 侦听器,该侦听器将调用另一个将字符串作为参数传递的活动。因此,当用户单击按钮时,将调用提供按钮文本的活动。主要目标是,如果我有两个小部件,每个小部件都会设置 onclick 侦听器发送不同的字符串作为参数。
代码:
int mAppWidgetId = 0;
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
String thestring = ... //this string is set dynamically by the configuration
RemoteViews views = new RemoteViews(this.getPackageName(), R.widget_profile);
views.setTextViewText(R.id.buttonWidget, thestring);
Intent clickIntent = new Intent(this, afterclickactivity.class);
clickIntent.putExtra("TheString", thestring);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, clickIntent, 0);
views.setOnClickPendingIntent(R.id.buttonWidget, pendingIntent);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
Run Code Online (Sandbox Code Playgroud)
问题:一切似乎都工作正常,小部件位于主屏幕中,按钮上的文本是用户选择的文本,如果我添加同一小部件的 2 个实例,它们根据用户选择具有不同的文本。但是,当用户按下第二个小部件上的按钮时,它会启动“afterclickactivity”,其参数与 widget1 相同,忽略第二个选择的字符串。
它像是:
小部件 1:文本:string1 onclick:callActivity(string1)
小部件 2:文本:string2 …
我在 Java 和 C# 方面有很多经验,但我是 Android 新手。我主要使用 C#,因为我很喜欢 Control 层次结构。我喜欢本体的即插即用。我正在尝试理解这个新范式中的本体,但我可能得到了一些虚假信息。
对于应用程序,这应该是最大的组成部分。在应用程序内,可能有多个活动。一个活动可以显示多个 Fragment。AppWidgets 似乎是一种特殊情况,因为它们作为 App 的一个组件存在,但会单独显示。有人告诉我,你可以扩展 Buttons 或 ProgressBar 来创建你自己的组件,这些组件又被称为 Widgets。
正如我所说,我可能完全错了。理想情况下,我想创建自己的小部件,我可以将其放在 Fragment、AppWidget 或 Activity 上;我可以将其中的任何一个组合成一个应用程序。我发现的所有在线资源都只在 AppWidget 的意义上讨论 Widget?我提供的信息不正确吗?任何人都可以澄清本体论吗?谢谢
如何AnalogClock在app小部件中设置Android的自定义时间?
作为替代方案,我正在考虑覆盖默认的AnalogClock来设置代码的时间.换句话说,我会创建自定义时钟,它从默认的View或AnalogClock扩展.然后将我的自定义时钟放在小部件布局UI上.
这可能吗?我担心RemoteViews会限制我们自己的自定义组件.
更新: 这是错误日志我首先遵循vArDo给出的解决方案.

我有分配给 onUpdate 的变量,需要访问我的应用程序小部件提供程序类的 onReceive 的值。
public class MyWidgetProvider extends AppWidgetProvider {
private static String name;
private static SharedPreferences myPrefs;
private static final String START_ACTION = "start";
@Override
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager,
final int[] appWidgetIds) {
views = new RemoteViews(context.getPackageName(), R.layout.layout_widget);
Intent intent1 = new Intent(context, MyAppWidgetProvider.class);
providerIntent.setAction(START_ACTION);
pendingIntent = PendingIntent.getBroadcast(context, 0, providerIntent, 0);
....
myPrefs = Context.getSharedPreferences("PrefsName", 0x0000);
name = "new name";
networkClient.requestItem(name, new JsonHandler {
@Override
public void requestSuccess(JSONObject resp) {
views.setOnClickPendingIntent(R.section, pendingIntent);
}
} …Run Code Online (Sandbox Code Playgroud) 在使用Android Studio开发App Widget时,我收到以下错误:
Error running app: Default activity not found
Run Code Online (Sandbox Code Playgroud)
但是,这是一个App Widget,而不是一个应用程序,甚至更多,它曾经在过去工作.
如何在不修改清单文件的情况下使Android Studio运行App Widget?