如何处理按钮单击控件 [英] How to Handle Button Click on Widget
问题描述
我为了自动更新已经一个构件上我的应用程序和服务
。
手工小部件有一个的ImageButton
其中触发器更新内容。但我无法处理Click事件。
下面是我的 AppWidgetProvider
:
公共类进myWidget扩展AppWidgetProvider {
公共静态字符串ACTION_WIDGET_RECEIVER =ActionReceiverWidget;
@覆盖
公共无效的OnUpdate(上下文的背景下,AppWidgetManager appWidgetManager,INT [] appWidgetIds){
super.onUpdate(背景下,appWidgetManager,appWidgetIds);
RemoteViews rmViews =新RemoteViews(context.getPackageName(),R.layout.widget_layout);
意图激活=新的意图(背景下,MyWidget.class);
active.setAction(ACTION_WIDGET_RECEIVER);
active.putExtra(味精,消息按钮1);
PendingIntent configPendingIntent = PendingIntent.getActivity(上下文,0,活性,0);
rmViews.setOnClickPendingIntent(R.id.buttonus1,configPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds,rmViews);
}
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
super.onReceive(背景下,意图);
如果(intent.getAction()。等于(ACTION_WIDGET_RECEIVER)){
Log.d(debug_tag,intent.getAction());
}
}
}
当我点击按钮,没有什么改变。它甚至不被记录。
的Manifest.xml声明:
<接收器安卓名=机器人进myWidget。:标签=@字符串/ APP_NAME>
<意向滤光器>
<作用机器人:名称=android.appwidget.action.APPWIDGET_UPDATE/>
<作用机器人:名称=com.app.example.MyWidget.ACTION_WIDGET_RECEIVER/>
&所述; /意图滤光器>
<元数据的android:NAME =android.appwidget.provider安卓资源=@ XML /小工具/>
< /接收器>
怎么了?
顺便说一句,如果我能处理一下,我应该怎么使用了手动更新?难道我把它传递给服务,哪些方式?
修改:更改 getActivity()
与 getBroadcast()
和处理点击好。但不能将此消息传递给服务。任何建议?
更新你的`AppWidgetProvider`:
公共类进myWidget扩展AppWidgetProvider {
公共静态字符串ACTION_WIDGET_RECEIVER =ActionReceiverWidget;
公共静态INT的appid [];
公共静态RemoteViews rview;
@覆盖
公共无效的OnUpdate(上下文的背景下,AppWidgetManager appWidgetManager,
INT [] appWidgetIds){
updateWidgetState(上下文,);
}
@覆盖
公共无效的onReceive(上下文paramContext,意图paramIntent)
{
字符串str = paramIntent.getAction();
如果(paramIntent.getAction()。等于(ACTION_WIDGET_RECEIVER)){
updateWidgetState(paramContext,STR);
}
其他
{
如果(android.appwidget.action.APPWIDGET_DELETED.equals(STR))
{
INT I = paramIntent.getExtras()调用getInt(appWidgetId,0);
如果(我== 0)
{
}
其他
{
INT [] arrayOfInt =新INT [1];
arrayOfInt [0] = I;
onDeleted(paramContext,arrayOfInt);
}
}
super.onReceive(paramContext,paramIntent);
}
}
静态无效updateWidgetState(上下文paramContext,字符串中的paramString)
{
RemoteViews localRemoteViews = buildUpdate(paramContext,中的paramString);
组件名localComponentName =新的组件名(paramContext,MyWidget.class);
AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName,localRemoteViews);
}
私有静态RemoteViews buildUpdate(上下文paramContext,字符串中的paramString)
{
// Toast.makeText(paramContext,buildUpdate()::+的paramString,Toast.LENGTH_SHORT).show();
rview =新RemoteViews(paramContext.getPackageName(),R.layout.widget_layout);
意图激活=新的意图(paramContext,MyWidget.class);
active.setAction(ACTION_WIDGET_RECEIVER);
active.putExtra(味精,消息按钮1);
PendingIntent configPendingIntent = PendingIntent.getActivity(paramContext,0,活性,0);
rmViews.setOnClickPendingIntent(R.id.buttonus1,configPendingIntent);
如果(parmString.equals(ACTION_WIDGET_RECEIVER))
{
//你的code进行更新,并且希望在按钮点击什么
}
返回rview;
}
@覆盖
公共无效onEnabled(上下文的背景下){
super.onEnabled(上下文);
// Toast.makeText(上下文,onEnabled(),Toast.LENGTH_SHORT).show();
}
//调用的应用程序窗口小部件的一个实例是从主机中删除每次
@覆盖
公共无效onDeleted(上下文的背景下,INT [] appWidgetId){
super.onDeleted(背景下,appWidgetId);
// Toast.makeText(上下文,onDeleted(),Toast.LENGTH_SHORT).show();
}
//调用时应用小工具的最后一个实例是从应用程序的Widget主机中删除。
@覆盖
公共无效onDisabled(上下文的背景下){
super.onDisabled(上下文);
// Toast.makeText(上下文,onDisabled(),Toast.LENGTH_SHORT).show();
}
}
I've a widget on my app and Service
in order to update automatically.
Widget has a ImageButton
which triggers updating content manually. But I couldn't handle click event.
Here is my AppWidgetProvider
:
public class MyWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
RemoteViews rmViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
Intent active = new Intent(context, MyWidget.class);
active.setAction(ACTION_WIDGET_RECEIVER);
active.putExtra("msg", "Message for Button 1");
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, active, 0);
rmViews.setOnClickPendingIntent(R.id.buttonus1, configPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, rmViews );
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
Log.d(debug_tag, intent.getAction());
}
}
}
When I clicked the button nothing changed. It doesn't even logged.
Manifest.xml declaration:
<receiver android:name=".MyWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="com.app.example.MyWidget.ACTION_WIDGET_RECEIVER"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget"/>
</receiver>
What's wrong?
By the way, if I could handle the click, how should I use for updating manually? Do I pass it to service and which way?
Edit: Changed getActivity()
with getBroadcast()
and handled click well. But couldn't pass this message to Service. Any recommendations?
Update your `AppWidgetProvider`:
public class MyWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
public static int appid[];
public static RemoteViews rview;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds){
updateWidgetState(context, "");
}
@Override
public void onReceive(Context paramContext, Intent paramIntent)
{
String str = paramIntent.getAction();
if (paramIntent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
updateWidgetState(paramContext, str);
}
else
{
if ("android.appwidget.action.APPWIDGET_DELETED".equals(str))
{
int i = paramIntent.getExtras().getInt("appWidgetId", 0);
if (i == 0)
{
}
else
{
int[] arrayOfInt = new int[1];
arrayOfInt[0] = i;
onDeleted(paramContext, arrayOfInt);
}
}
super.onReceive(paramContext, paramIntent);
}
}
static void updateWidgetState(Context paramContext, String paramString)
{
RemoteViews localRemoteViews = buildUpdate(paramContext, paramString);
ComponentName localComponentName = new ComponentName(paramContext, MyWidget.class);
AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName, localRemoteViews);
}
private static RemoteViews buildUpdate(Context paramContext, String paramString)
{
// Toast.makeText(paramContext, "buildUpdate() ::"+paramString, Toast.LENGTH_SHORT).show();
rview = new RemoteViews(paramContext.getPackageName(), R.layout.widget_layout);
Intent active = new Intent(paramContext, MyWidget.class);
active.setAction(ACTION_WIDGET_RECEIVER);
active.putExtra("msg", "Message for Button 1");
PendingIntent configPendingIntent = PendingIntent.getActivity(paramContext, 0, active, 0);
rmViews.setOnClickPendingIntent(R.id.buttonus1, configPendingIntent);
if(parmString.equals(ACTION_WIDGET_RECEIVER))
{
//your code for update and what you want on button click
}
return rview;
}
@Override
public void onEnabled(Context context){
super.onEnabled(context);
// Toast.makeText(context, "onEnabled() ", Toast.LENGTH_SHORT).show();
}
// Called each time an instance of the App Widget is removed from the host
@Override
public void onDeleted(Context context, int [] appWidgetId){
super.onDeleted(context, appWidgetId);
// Toast.makeText(context, "onDeleted() ", Toast.LENGTH_SHORT).show();
}
// Called when last instance of App Widget is deleted from the App Widget host.
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
// Toast.makeText(context, "onDisabled() ", Toast.LENGTH_SHORT).show();
}
}
这篇关于如何处理按钮单击控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!