Android主屏幕小部件神秘失败,无法接收触摸事件
我有一个图形复杂的Android主屏幕(通过AppWidgetProvider)小部件,我根本无法响应触摸事件。 一般的想法是,轻敲小部件应该使其在接下来的4-5秒内改变模式以显示不同的信息,但是对于我的生活来说,它没有表现出接受Touch事件的迹象。
我采取的步骤如下:
我在Manifest.xml中实现了一个intent-filter,像这样...
<action android:name="foo.kung.fancywidget.TOUCHED" />;
...它位于widget的<receiver />
容器内,紧邻Android Studio有助于添加的预期APPWIDGET_UPDATE
条目。
我已确保所使用的布局的每个单元上的clickable属性都设置为true(只是为了彻底),包括顶层的RelativeLayout本身。
我已经为ExtraFancyWidget.class顶部的东西定义了静态字符串,就像这样...
public static final String TOUCHED = "foo.kung.fancywidget.TOUCHED";
...根据我一直在阅读的内容,它应该通过onRecieve处理程序进行广播,当这样做完成时...
if (TOUCHED.equals(intent.getAction())) {
Log.i("onReceive", "Touch event received");
}
......但是在onReceive处理程序的顶部有一个Log.d条目,我可以告诉我除了每10秒钟从系统服务发出的心跳信号外,并没有通过那里得到任何信号。
最后,我正在分配意图,就像我一直在阅读的那样
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);
}
......这实际上是在更新视图之前在onUpdate中发生的最后一件事
views.setOnClickPendingIntent(R.id.TheWholeWidget, createOnClickIntent(context));
appWidgetManager.updateAppWidget(appWidgetId, views);
在这一点上,我可能忽略了什么? 我不知道我应该做什么或改变做这项工作......它只是神秘地忽略了用户。 亚行从未向我显示任何日志条目(虽然它显示了许多其他愚蠢的日志消息,所以我知道这是有效的),这表明小部件曾经看到我点击它。
问题出在步骤5,您正在创建意图。 不要为这个意图设置一个特定的类,而是只用一个动作来创建它,像这样:
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);
最后,如果此广播将仅用于您的应用程序(极有可能),请考虑使用LocalBroadcastManager。
链接地址: http://www.djcxy.com/p/8941.html上一篇: Android home screen widget mysteriously fails to receive touch events