gpt4 book ai didi

java - Android,位置请求作为后台服务,并将其发送到网络

转载 作者:行者123 更新时间:2023-12-01 13:30:52 25 4
gpt4 key购买 nike

我的应用程序的要求是在某些情况发生时在后台启动我的服务,例如调用特定的电话号码。该事件之后,我需要获取用户位置并将其发送到网络。

这就是我到目前为止所做的,广播接收器来处理事件,然后我启动我的服务。我正在使用该服务来获取用户当前位置,为了实现这一点,我在后台运行我的服务,对于这个循环器和消息概念,通过重写handleMessage,并通过 onStartCommand 重写传递 Intent 信息。这是代码

 @Override
public boolean handleMessage(Message message) {
Intent intent = (Intent) message.obj;
String action = intent.getAction();
if (START_EMERGENCY_SERVICE_ACTION.equalsIgnoreCase(action)) {
startMonitoring();
} else if (STOP_EMERGENCY_SERVICE_ACTION.equalsIgnoreCase(action)){
stopMonitoring();
stopSelf();
}
return true;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mHandler.sendMessage(mHandler.obtainMessage(0, intent));
return START_STICKY;
}

private void startMonitoring() {
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationListener, mHandlerThread.getLooper());
}

在我的位置监听器类中,我通过其位置更新方法正确获取当前位置。

@Override
public void onLocationChanged(Location location) {
Location bestLocation = getBestLocation(location);

if (bestLocation != lastLocation) {
Log.i(getClass().getSimpleName(),
String.format("Location Changed %s @ %d %f:%f (%f meters)",
bestLocation.getProvider(),
bestLocation.getTime(),
bestLocation.getLatitude(),
bestLocation.getLongitude(),
bestLocation.getAccuracy()));
}
}

现在,我的挑战是将此位置发送到我的网络服务器,该服务器具有 REST API。以前我在 Activity 中将 httpUtil 与 AsyncTask 一起使用,但如何在后台 Activity 中执行相同的操作。我应该启动另一个后台服务来进行服务器通信吗?我也对其他架构变化持开放态度。

我确实必须从 2.3 开始提供支持,现在我使用的是较旧的定位方式,但将来它应该具有足够的可扩展性,可以迁移到融合位置。

最佳答案

由于您的服务已经在后台线程上运行,因此将 Web 服务代码直接实现到服务中没有问题。如果您不希望 Web 服务调用阻塞线程,您还可以使用服务中的另一个线程/AsyncTask/等。

关于java - Android,位置请求作为后台服务,并将其发送到网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com