Android小部件无法点击

3

我有一个Widget,当它被点击时应该显示一个Toast。

public class WidgetActivity extends AppWidgetProvider {


 @Override
 public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
     for (int i = 0; i < appWidgetIds.length; i++) {  

         int appWidgetId = appWidgetIds[i];  
         Intent intent = new Intent(context, WidgetActivity.class);  
         intent.setAction("ActionOne");  
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);  
         RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
         views.setOnClickPendingIntent(R.id.LinLayWiget, pendingIntent);  
         appWidgetManager.updateAppWidget(appWidgetId, views);  

     }

 }



 @Override  
 public void onReceive(Context context, Intent intent) {  

     Log.e("YYY","YYYY");
     Toast.makeText(context, "AAA", 1500).show();

     if (intent.getAction().equals("ActionOne")) {  

         Log.e("X","X");
         Toast.makeText(context, "I'm CLICKED!", 1500).show();

        }  
     super.onReceive(context, intent);  
 } 




}

清单:

...
        <receiver android:name="WidgetActivity" android:label="FXMaster" android:icon="@drawable/assiconwi">

            <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widgetprovider" />
                <intent-filter>
                        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
                </intent-filter>
        </receiver>
...

但是一旦小部件被点击,什么也不会发生。有关可能出错的想法吗?
谢谢!

你看到它进入了OnResume函数吗?像调试一样?如果在那里,你看到了不同的操作吗?顺便说一句,最好使用"ActionOne".equals(intent.getAction())来避免可能的空指针 :-) - Jackie
还有,我假设你的 AndroidManifest.xml 文件中有 'package="Fart.Widget"' 对吧?通常最好使用...new RemoteViews(context.getPackageName(), R.layout.widget_layout); - Jackie
谢谢你的建议,Jackie!我已经编辑了代码,请看上面,但它仍然没有结果。:( - Roger Travis
也许无法点击“LinLayWiget”元素?尝试添加图像或按钮并检查结果? - span
1个回答

3

我在这里为您提供帮助。

1) onUpdate 重写方法应该调用(例如在方法开头处)。

super.onUpdate(context, appWidgetManager, appWidgetIds);

2) 因为这一行代码:

intent.setAction("ActionOne");

您的意图可能会被忽略,所以代码不会落入 onReceive 中的 if 语句中。像这篇文章一样添加一个唯一标识符 Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

最后,请注意更改类名,因为它实际上不是 Activity。

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接