【问题标题】:Triggering pending intent in Android在 Android 中触发待处理的意图
【发布时间】:2014-04-02 12:00:24
【问题描述】:

我创建了一个带有按钮和待定意图的小部件,以便在按下按钮时打开一个活动。我需要知道是否有某种方法可以在重复一定时间后自动触发我的待处理意图,以检查该活动中是否有更新。我需要使用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);

        }
    }
}

【问题讨论】:

  • 您在这里想要实现的目标让我有点困惑。如果用户处于锁定屏幕/主屏幕并使用小部件,则活动中不会发生更新。尝试更好地描述您想要实现的目标 - 例如,根据提供商的更改更新小部件或检查网络服务?
  • 好吧,基本上我正在寻找的是在 but1.class 中发生一些更新时立即更新我的小部件。我告诉你我需要为此创建服务扩展类,但我将如何通知关于我的服务类更新的小部件?

标签: android widget android-pendingintent


【解决方案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);
}
  }

【讨论】:

    【解决方案2】:

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

    见:http://developer.android.com/reference/android/os/CountDownTimer.html

    但我不太确定你想在这里实现什么。

    如果发生任何变化,您是否可以不让“其他活动”提醒您需要什么?

    也许使用回调例程。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多