- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在通过 AppWidgetManager.updateAppWidget 手动更新我的小部件时遇到了问题。平台为 Android 2.2。
代码如下:
我在 list 中为现有 Activity 额外声明了小部件:
<receiver android:name=".Widget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
</receiver>
小部件类在 Widget.java 中声明:
public class Widget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
int use_static_ip;
RemoteViews remoteViews;
try {
use_static_ip = Settings.System.getInt(context.getContentResolver(), Settings.System.WIFI_USE_STATIC_IP);
if (use_static_ip == 0) { //DHCP
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_dhcp);
} else { //static IP
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_static);
}
Intent call_activity = new Intent(context, StaticIPToggle.class);
PendingIntent pending_call_activity = PendingIntent.getActivity(context, 0, call_activity, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_icon, pending_call_activity);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在现有 Activity 中,我添加了一些行来手动更新小部件:
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName componentName = new ComponentName(getApplicationContext(), Widget.class);
int[] ids = appWidgetManager.getAppWidgetIds(componentName);
Intent update_widget = new Intent();
update_widget.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
update_widget.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
getApplicationContext().sendBroadcast(update_widget);
但是现在我有这个错误:如果 widget 处于 onClicked 状态,它会在显示所需的 widget 之前短时间(~0,5sec-1sec)显示 energy-settings-widget。
这里是这个问题的截图(从左到右的顺序):http://i.stack.imgur.com/rHkjw.jpg
首先是左侧图片中的小部件,然后变为中间图片并在 ~0.5-1 秒后停留在那里或变为右侧图片。
很遗憾,我看不到代码中有任何错误,你呢?
希望你能帮我解决这个问题;)提前致谢,问候,奥利
最佳答案
我遇到了完全相同的问题。我通过手动更新小部件而不是通过广播,而是直接调用 AppWidgetManager.updateAppWidget(ComponentName, RemoteViews) 解决了这个问题。相反,来自 AsyncTask。
在你的 Widget 类中试试这个:
/**
* Asynchronously builds views and updates the widget.
*/
private static class UpdateWidgetTask extends AsyncTask<Void, Void, RemoteViews> {
private AppWidgetManager mAppWidgetManager;
private Context mContext;
private UpdateWidgetTask(AppWidgetManager appWidgetManager, Context context) {
mAppWidgetManager = appWidgetManager;
mContext = context;
}
@Override
protected RemoteViews doInBackground(Void... params) {
DebugLog.d(TAG, "Asynchronously updating widget.");
RemoteViews views = buildUpdate(mContext);
return views;
}
@Override
protected void onPostExecute(RemoteViews views) {
ComponentName thisWidget = new ComponentName(mContext, Widget.class);
mAppWidgetManager.updateAppWidget(thisWidget, views);
}
}
/**
* Asynchronously updates all widgets of this type. This is the fastest way to update the widget.
*
* @param context The context.
*/
public static void updateWidget(Context context) {
new UpdateWidgetTask(AppWidgetManager.getInstance(context), context).execute();
}
然后通过从您的 Activity 调用 Widget.updateWidget(this) 进行更新。
关于android - 通过 AppWidgetManager 更新我自己的小部件时,电源控制小部件显示了一小会儿,这是什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621786/
我正在尝试将 AppWidget 添加到我的应用程序中,但似乎 android 开发团队提供了所需的类,同时限制了它们的使用(一如既往地缺乏文档)。似乎我发现的唯一方法(为了获得功能齐全的 AppWi
我有一个简单的小部件,我尝试在 onUpdate 方法之外更新它的内容。我创建了:context 和 appWidgetManager 字段变量,编译器没有给出任何错误,但是我在声明 AppWidge
我正在开发一个应用小部件,它使用 RemoteViews 来显示一个 ListView。为了简单起见,我将对 appwidget 的功能进行类比: 用户将选择将应用程序小部件添加到主屏幕。选择小部件后
我正在构建一个自定义启动器。我已经按照步骤在 Android 文档中提到用于托管 App Widgets 以及浏览默认启动器源代码。但是,当我使用作为 AppWidgetManager.ACTION_
我从小部件用户那里收到有关 android.os.TransactionTooLargeException 的报告: android.os.TransactionTooLargeException a
我有三个关于App Widget Options的问题: 1) 如果我想向应用小部件的选项添加选项值,我应该始终首先使用 getAppWidgetOptions(int) 检索小部件选项,然后操纵 B
我有一个应用程序小部件,我正尝试从 Activity 中更新它。 为此,我需要 appwidget id。 我使用了 AppWidgetManager.getAppWidgetIds 但它总是返回一个
我在通过 AppWidgetManager.updateAppWidget 手动更新我的小部件时遇到了问题。平台为 Android 2.2。 代码如下: 我在 list 中为现有 Activity 额
我正在尝试获取我的小部件的所有 ACTIVE 实例的列表。在我的 AppWidgetProvider 的 OnUpdate 方法中,我正在执行以下操作: // Get all ids Componen
我的小部件由 2 个按钮和一个显示数据的 ListView 组成。大多数情况下,当小部件提供程序的 onUpdate 方法被调用时,一切都会正常加载并且大家都很高兴。 但是我注意到有时在调用更新方法后
我在我的 Android 应用程序中定义了一个小部件,该小部件映射到由配置 Activity 选择的特定电灯开关。小部件的每个实例都可以映射到不同的灯开关,点击小部件可以打开和关闭灯。以下是设置小部件
我是一名优秀的程序员,十分优秀!