Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击按钮时未调用Android AppWidgetProvider onReceive_Java_Android_Android Widget_Android Appwidget - Fatal编程技术网

Java 单击按钮时未调用Android AppWidgetProvider onReceive

Java 单击按钮时未调用Android AppWidgetProvider onReceive,java,android,android-widget,android-appwidget,Java,Android,Android Widget,Android Appwidget,我有一个在android下运行的小部件,我希望当用户点击小部件上的按钮时,它会自动更新 由于某些原因,在我安装小部件后单击按钮时,永远不会调用onReceive方法 在我的AppWidgetProvider类中有一个类似于这样的onUpdate方法: @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

我有一个在android下运行的小部件,我希望当用户点击小部件上的按钮时,它会自动更新

由于某些原因,在我安装小部件后单击按钮时,永远不会调用onReceive方法

在我的AppWidgetProvider类中有一个类似于这样的onUpdate方法:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                    int[] appWidgetIds) {

        super.onUpdate(context, appWidgetManager, appWidgetIds);

        for (int i = 0; i < appWidgetIds.length; ++i) {

              final RemoteViews rv = 
new RemoteViews(context.getPackageName(), R.layout.appwidget_provider);       

              final Intent nextIntent = 
new Intent(context, TestAppWidgetProvider.class);
              nextIntent.setAction(TestAppWidgetProvider.NEXT_ACTION);
              nextIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);

              final PendingIntent refreshPendingIntent = 
PendingIntent.getBroadcast(context, 0,
                                nextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
              rv.setOnClickPendingIntent(R.id.next, refreshPendingIntent);

              appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
         }
}
我的清单文件中也有:

<receiver android:name="com.test.android.widget.TestAppWidgetProvider" >
      <intent-filter >
          <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
      </intent-filter>
      <intent-filter >
          <action android:name="com.test.android.widget.PREV" />
      </intent-filter>
      <intent-filter >
          <action android:name="com.test.android.widget.NEXT" />
      </intent-filter>
      <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/appwidget_info" />
</receiver>


在我安装小部件并单击下一步按钮后,onReceive方法由于某种原因从未被调用…

修复了它,结果证明它是微不足道的

这是因为在创建小部件时甚至没有调用onReceive,所以没有设置事件侦听器


将onReceive中的一些代码(设置SetOnClickPendingContent等)添加到一个函数中,该函数在小部件配置活动准备好更新小部件时调用。

您能分享您的解决方案吗?
<receiver android:name="com.test.android.widget.TestAppWidgetProvider" >
      <intent-filter >
          <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
      </intent-filter>
      <intent-filter >
          <action android:name="com.test.android.widget.PREV" />
      </intent-filter>
      <intent-filter >
          <action android:name="com.test.android.widget.NEXT" />
      </intent-filter>
      <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/appwidget_info" />
</receiver>