6

我有一个带有 R.id.eventDistance 和 R.id.eventTime 的活动来显示基于当前位置的距离和旅行时间。我使用我的位置服务类每 30 秒计算一次这些值。

我的问题是:如何更新 Activity 中的 TextView?我尝试查找问题并找到了一些可能的解决方案,例如使用 BroadcastReceiver 并在 onReceive() 方法中调用 TextView.setText() 。我不确定这是怎么做到的。我是否应该像这样传递 Activity 类:

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context, HomeActivity.class);
   }
} 

我不知道在那之后该怎么做。任何帮助表示赞赏。

4

2 回答 2

15

请看这个流程。

1.在您想要更新 UI 时的 LocationService 类中。在您的情况下,它应该每 30 秒调用一次。

Intent i = new Intent("LOCATION_UPDATED");
i.putExtra("<Key>","text");

sendBroadcast(i);

2.在你的 UI (HomeActivity) 类中

在 onCreate()

registerReceiver(uiUpdated, new IntentFilter("LOCATION_UPDATED"));

在班上

private BroadcastReceiver uiUpdated= new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        TextView.setText(intent.getExtras().getString("<KEY>"))

    }
};

在 onDestroy()

unregisterReceiver(uiUpdated);
于 2013-02-25T04:24:43.740 回答
1

您应该将 Activity 绑定到您的服务,以便它们可以直接通信和消息传递。

参考

http://developer.android.com/guide/components/bound-services.html

于 2013-02-25T04:27:04.643 回答