我有一个后台服务GpxService

public class GpxService extends Service implements LocationListener {
    public boolean is_recording;
    ...
}


我可以在MainActivity中将该服务作为后台服务启动:

gpxService = new Intent(MainActivity.this, GpxService.class);
gpxService.setAction(GpxService.START_SERVICE);
// notification, startForeground, etc. managed within gpxService onStartCommand
startService(gpxService);


如何在MainActivity的Intent gpxService中访问标志boolean is_recording



背景:我有两个按钮,即记录和停止。在MainActivity的onCreate方法中,我使用setEnabled将其中一个显示为灰色,而将另一个保持可单击状态。我想要哪个按钮为灰色,哪个按钮可单击以取决于后台服务中的布尔标志is_recording

我在MainActivity中没有is_recording,因为有时会破坏它以清除内存。在这种情况下,后台服务仍在运行,重新打开应用程序将重置is_recording标志,错误地触发if语句,并使错误的按钮变灰。

最佳答案

对于诸如您这样的情况,您应该使用IBinderService对象和您的Activity实例之间建立连接。

看一下bindService调用,建立连接后,您将可以访问活动的GpxService实例的所有公共字段和方法。

09-05 21:03