2014-04-02 29 views
1

我創建了一個小部件,其中包含一個按鈕和一個掛起的意圖,用於在按下按鈕時打開一個活動。我需要知道是否有某種方法可以在一段時間後重復自動觸發待處理意圖,以檢查該活動是否有更新。我需要使用alarmManager嗎?在Android中觸發掛起的意圖

public class MainActivity extends AppWidgetProvider { 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     // TODO Auto-generated method stub 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 

     final int N = appWidgetIds.length; 

     for (int i=0; i<N; i++) { 
      int appWidgetId = appWidgetIds[i]; 

      Intent intent = new Intent(context, But1.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 


      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main); 
      views.setOnClickPendingIntent(R.id.button1, pendingIntent); 


     appWidgetManager.updateAppWidget(appWidgetId, views); 

     } 
    } 
} 
+0

這是一個有點混亂給我,你正試圖在這裏實現什麼。如果用戶處於鎖定屏幕/主屏幕並使用小部件,則活動中不會發生更新。嘗試更好地描述你想實現的目標 - 例如,根據提供者的變化更新小部件或者檢查Web服務? – andyandy

+0

好吧,基本上我在尋找的是更新我的小部件,只要在but1.class中發生了一些更新。我得到了你,我需要爲此創建服務擴展類,但是如何通知我的小部件有關從我的更新服務類? –

回答

1

甲很容易圖案是使用廣播接收器。你的服務或供應商發送廣播這樣的:

getContext().sendBroadcast(new Intent(MyWidgetService.ACTION_UPDATE, null)); 

在你的微件提供一流這樣實現的onReceive:

@Override 
public void onReceive(Context context, Intent intent) { 
    if (MyWidgetService.ACTION_UPDATE.equals(intent.getAction())) { 
    // Do something. 
     // For example you can just call your widget provider's onUpdate method here. 
     final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
     assert appWidgetManager != null; 

     final int[] allWidgetIds; 
     if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) { 
      allWidgetIds = new int[] { 
       intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID), 
      }; 
     } else { 
      final ComponentName componentName = new ComponentName(context, this.getClass()); 
      allWidgetIds = appWidgetManager.getAppWidgetIds(componentName); 
     } 

     if (allWidgetIds == null || allWidgetIds.length <= 0) { 
      return; 
     } 

     onUpdate(context, appWidgetManager, allWidgetIds); 
    } else { 
    super.onReceive(context, intent); 
} 
    }