在Android中触发待处理的意图

时间:2014-04-02 12:00:25

标签: android widget android-pendingintent

我创建了一个带有按钮的窗口小部件,以及在按下按钮时打开活动的待定意图。我需要知道是否有某种方法可以在反复一定时间后自动触发我的待处理意图,以检查该活动是否有更新。我需要使用alarmManager吗?

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);

        }
    }
}

2 个答案:

答案 0 :(得分: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);
}
  }

答案 1 :(得分:0)

我过去曾使用倒数计时器在一段时间后更新内容。

请参阅:http://developer.android.com/reference/android/os/CountDownTimer.html

但我不确定你在这里想要实现的目标。

你能否进行&#34;其他活动&#34;如果发生任何变化,请提醒您需要什么?

也许使用回调例程。

http://www.javaworld.com/article/2077462/learn-java/java-tip-10--implement-callback-routines-in-java.html