我有一个非常简单的小部件(两个文本视图和一个按钮)。我已经在Touchpad、Droid 1和Droid Razr上进行了测试。除了Razr之外,它在所有设备上都可以正常工作。当我将小部件添加到主屏幕时,它不会显示出来;它是完全不可见的。如果我按住它应该在的位置,它会选择一个小部件,如果我移动它,我会看到其他小部件移开,但它完全不可见。
我在
有人有这方面的经验吗?
编辑:请注意,这仅用于调试,不遵循最佳实践。
我在
onReceive
和onEnabled
方法中放置了一些Toast,并且Toast
显示了所有正确的信息(即意图操作和额外信息)。有人有这方面的经验吗?
编辑:请注意,这仅用于调试,不遵循最佳实践。
public class GoogleTalkWidget extends AppWidgetProvider {
Button sendMessage;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received Intent Action = " +
intent.getAction(), Toast.LENGTH_SHORT).show();
if(intent.getAction().equals(Utils.RECEIVED_MESSAGE_WIDGET)){
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.main_widget);
views.setTextViewText(R.id.widget_message,
(CharSequence)intent.getStringExtra("MESSAGE"));
views.setTextViewText(R.id.widget_sender,
(CharSequence)intent.getStringExtra("SENDER"));
Toast.makeText(context, "Received " +
intent.getStringExtra("MESSAGE") + " FROM " +
intent.getStringExtra("SENDER"), Toast.LENGTH_SHORT).show();
ComponentName cn = new ComponentName(context,
GoogleTalkWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, views);
}
super.onReceive(context, intent);
}
@Override
public void onEnabled(final Context context){
super.onEnabled(context);
Toast.makeText(context, "Enabled", Toast.LENGTH_SHORT).show();
}
}
onReceive()
?你是不是指的是你的AppWidgetProvider
的onUpdate()
方法? - CommonsWareonReceive()
方法...我认为他们保留了它,是因为早期版本的Android存在一些onDelete
问题。 - EliezeronUpdate()
通常是您提供RemoteViews
以声明应放入小部件中的内容的位置。onUpdate()
被调用了吗?您是否成功提供了RemoteViews
?LogCat 中是否有任何相关信息(例如,堆栈跟踪)? - CommonsWareonReceive
。安卓文档明确表示,只需实现onReceive
,您就可以将appwidget用作广播接收器。此外,问题不在于appwidget在任何地方都能正常工作......问题在于某些手机上无法显示......是的,我已经尝试过删除onReceive
以确保没有问题,但什么也没改变......我们能否请继续讨论其他事情? - Eliezer