ppWidgetProvider @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if(intent.getAction().equals("test.CLICK")) { CallTestMethod(context); } } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; RemoteViews views=new RemoteViews(context.getPackageName(), R.layout.widget); Intent clickintent=new Intent("test.CLICK"); PendingIntent pendingIntentClick=PendingIntent.getBroadcast(context, 0, clickintent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.change_mode, pendingIntentClick); SetInitialLayout(context); appWidgetManager.updateAppWidget(appWidgetId, views); } super.onUpdate(context, appWidgetManager, appWidgetIds); }
上述代码在旋转屏后失效,解决办法是
@Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if(intent.getAction().equals("test.CLICK")) { getIntent().putExtra("Just received click", true); CallTestMethod(context); } }
或者呢 如下使用
@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { context.startService(new Intent(context, MyUpdateService.class)); }
public static class MyUpdateService extends Service { @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); // Update the widget RemoteViews remoteView = buildRemoteView(this); // Push update to homescreen pushUpdate(remoteView); } public RemoteViews buildRemoteView(Context context) { int layoutID = R.layout.widget; if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ layoutID = R.layout.widget_landscape; } //Here is where you set your onclick listeners again since the remote views need to be refreshed/recreated RemoteViews updateView = new RemoteViews(context.getPackageName(),layoutID); // Create an Intent to launch ExampleActivity Intent intent = new Intent(this, yourAndroidActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); updateView.setOnClickPendingIntent(R.id.yourClickableViewHere, pendingIntent); return updateView; } @Override public void onConfigurationChanged(Configuration newConfig) { RemoteViews remoteView = buildRemoteView(this); // Push update to home screen pushUpdate(remoteView); } private void pushUpdate(RemoteViews updateViews) { ComponentName myWidget = new ComponentName(this, YourAppWidgetbackground-color: transparent; margin: 0px; color: #000000; font-size: 14px; vertical-align: bas