我有一个活动 - MainActivity
和一个服务 - MainService
(在清单中声明服务在另一个进程中运行)
在MainService
(实施LocationListener
)我有:
onStartCommand()
- 我获取经度和纬度值并将其作为额外值发送到广播中。为onLocationChanged()
在MainActivity
:
static double
变量 - latitud
& longitud
开始按钮 - 启动服务。用以下方法注册广播接收器。
private void strtBrdCast() {
IntentFilter intntFilter = new IntentFilter();
intntFilter.addAction("MyBroadcast");
mReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
latitud = intent.getDoubleExtra("xLat",0);
longitud = intent.getDoubleExtra("xLon",0);
txtVwLati.setText(String.valueOf(latitud));
txtVwLongi.setText(String.valueOf(longitud));
}
};
//registering our receiver
this.registerReceiver(mReceiver, intntFilter);
}
停止按钮 - 停止服务。
onResume()
活动:检查我的服务。如果服务可用,则将经度纬度值从静态变量设置为textBoxes
。工作正常 - 当我使用Emulator控件发送位置时。当我按下后退按钮并返回活动时,即使是服务仍然可用。但是静态变量没有得到更新,也没有在textBoxes
中显示位置值。
是否因为活动不在前台而不能接收任何广播?
我还尝试从service-in onLocationChanged()
更新活动的静态变量。也不起作用。
-------- ----------已编辑
如果我在服务类中使用静态变量并在活动的onResume()上检索它们。为什么它也不起作用?
答案 0 :(得分:0)
取决于您取消注册广播接收器的位置,因为您的活动在后台,您无法更新活动的TextView
,解决方法是将值分配给静态变量,然后更新您的{{1在TextViews
或onCreate()
方法中。