Android主屏幕小部件神秘地无法接收触摸事件

时间:2015-01-25 20:52:20

标签: android android-appwidget

我有一个图形复杂的Android主屏幕(通过AppWidgetProvider)小部件,我根本无法响应触摸事件。一般的想法是,点击小部件应该使其在接下来的4-5秒内改变模式以显示不同的信息,但对于我的生活,它没有显示任何接收Touch事件的迹象。

我采取的步骤如下:

  1. 我在Manifest.xml中实现了一个intent-filter,就像这样......

    <action android:name="foo.kung.fancywidget.TOUCHED" />;
    
  2. ...它位于小部件的<receiver />容器内,紧挨着Android Studio有用添加的预期APPWIDGET_UPDATE条目。

    1. 我确保所使用的布局在每个元素(只是为了彻底)上将clickable属性设置为true,包括顶级RelativeLayout本身。< / p>

    2. 我已经在ExtraFancyWidget.class的顶部定义了东西的静态字符串,就像这样......

      public static final String TOUCHED = "foo.kung.fancywidget.TOUCHED";
      
    3. ...根据我一直在阅读的内容,它应该通过onRecieve处理程序进行广播,如下所示...

      if (TOUCHED.equals(intent.getAction())) {
          Log.i("onReceive", "Touch event received");
      }
      
    4. ...但是在onReceive处理程序顶部有一个Log.d条目我可以告诉我除了每十秒钟从系统服务发出的心跳之外,我没有得到任何类型的信号

      1. 最后,我正在分配意图,就像我一直在阅读

        一样
        private PendingIntent createOnClickIntent(Context context) {
            Intent intent = new Intent(context, ExtraFancyWidget.class);
            intent.setAction(TOUCHED); // WHY DOESN'T THIS WORK?!?!?
            return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        }
        
      2. ......在视图更新之前,它确实是onUpdate中发生的最后一件事

        views.setOnClickPendingIntent(R.id.TheWholeWidget, createOnClickIntent(context));
        appWidgetManager.updateAppWidget(appWidgetId, views);
        
      3. 在这一点上,我可能会忽略或看不到什么?我不知道我应该做的任何其他事情或改变以使其工作......它只是神秘地忽略了用户。 ADB从未向我显示任何日志条目(虽然它确实显示了许多其他的,愚蠢的日志消息,所以我知道它正在工作),这表明小部件曾经看到我点击它。

1 个答案:

答案 0 :(得分:1)

问题出在第5步,您正在创建意图。不要为intent设置特定的类,而是仅使用一个动作创建它,如下所示:

Intent intent = new Intent();
intent.setAction(TOUCHED); // this should work now

或简写

Intent intent = new Intent(TOUCHED);

如果它仍然不起作用,请考虑在构建PendingIntent时放置一个非0的requestCode。根据您正在构建的Android版本,仅使用0时会出现一些错误。

return PendingIntent.getBroadcast(context, 1000, intent, PendingIntent.FLAG_UPDATE_CURRENT);

最后,如果此广播仅在您的应用中使用(极有可能),请考虑使用a LocalBroadcastManager