桌面小部件旋转屏后失效问题

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 

你可能感兴趣的:(问题)