mirror of
http://gitea.winboll.cc/Studio/WinBoLL.git
synced 2026-06-29 20:12:23 +08:00
修复GPS订阅数据流断裂,打通MainService→广播→ChildService完整链路
- GpsSubscribeResult 增加 latitude/longitude/locationTime 字段及序列化
- GpsSubscribeReceiverService 重写 onCreate/onDestroy 动态注册广播接收器,onStartCommand 读取 SID 并绑定
- GpsSubscribeControlView 启动服务时传递 EXTRA_SUBSCRIBE_SID
- MainService 步长判断通过后调用 sendSubscribeResult();initManager() 补调 initContext(this)
- GpsReceiverChildService{1,2,3} 补调 super.onStartCommand
- AndroidManifest.xml 修正广播 Action 为 cc.winboll.studio.GPS_SUBSCRIBE_CALLBACK
- GpsSubscribeManager/GpsSubscribeObserverReceiver 广播 Extra 键名改用常量
- GpsSubscribeConst 新增 EXTRA_SUBSCRIBE_SID/EXTRA_SUBSCRIBE_RESULT/EXTRA_LOCATION_POINT
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#Created by .winboll/winboll_app_build.gradle
|
||||
#Wed Jun 03 12:37:33 GMT 2026
|
||||
#Thu Jun 04 17:48:23 HKT 2026
|
||||
stageCount=27
|
||||
libraryProject=
|
||||
baseVersion=15.11
|
||||
publishVersion=15.11.26
|
||||
buildCount=37
|
||||
buildCount=43
|
||||
baseBetaVersion=15.11.27
|
||||
|
||||
@@ -21,6 +21,7 @@ public final class GpsReceiverChildService1 extends GpsSubscribeReceiverService
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
super.onStartCommand(intent, flags, startId);
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ public final class GpsReceiverChildService2 extends GpsSubscribeReceiverService
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
super.onStartCommand(intent, flags, startId);
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ public final class GpsReceiverChildService3 extends GpsSubscribeReceiverService
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
super.onStartCommand(intent, flags, startId);
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,9 @@ import androidx.core.app.NotificationCompat;
|
||||
import cc.winboll.studio.libappbase.LogUtils;
|
||||
import cc.winboll.studio.libgitsion.manager.GpsSubscribeManager;
|
||||
import cc.winboll.studio.libgitsion.manager.SubscribeLocationManager;
|
||||
import cc.winboll.studio.libgitsion.model.GpsSubscribeConst;
|
||||
import cc.winboll.studio.libgitsion.model.GpsSubscribeMsg;
|
||||
import cc.winboll.studio.libgitsion.model.GpsSubscribeResult;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -85,6 +87,7 @@ public final class MainService extends Service {
|
||||
*/
|
||||
private void initManager() {
|
||||
mSubscribeManager = GpsSubscribeManager.getInstance();
|
||||
mSubscribeManager.initContext(this);
|
||||
mLocationRuleManager = SubscribeLocationManager.getInstance();
|
||||
}
|
||||
|
||||
@@ -189,20 +192,37 @@ public final class MainService extends Service {
|
||||
//更新前台通知文案
|
||||
updateForegroundNotification(locationInfo);
|
||||
|
||||
double currentLat = location.getLatitude();
|
||||
double currentLng = location.getLongitude();
|
||||
long currentTime = location.getTime();
|
||||
|
||||
//遍历全部订阅者进行推送规则判断
|
||||
Map<String, GpsSubscribeMsg> subscribeAllMap = mSubscribeManager.getSubscribeMap();
|
||||
for (Map.Entry<String, GpsSubscribeMsg> entry : subscribeAllMap.entrySet()) {
|
||||
final String subscribeSid = entry.getKey();
|
||||
final GpsSubscribeMsg subscribeConfig = entry.getValue();
|
||||
|
||||
double currentLat = location.getLatitude();
|
||||
double currentLng = location.getLongitude();
|
||||
|
||||
//判断是否满足推送条件(全订阅/步长阈值)
|
||||
boolean allowPush = mLocationRuleManager.isNeedPush(subscribeSid, currentLat, currentLng);
|
||||
if (allowPush) {
|
||||
//推送成功后刷新该订阅者基准定点坐标
|
||||
mLocationRuleManager.updateSubscriberPoint(subscribeSid, currentLat, currentLng);
|
||||
mLocationRuleManager.addPushCount(subscribeSid);
|
||||
|
||||
//发送结果广播给订阅者
|
||||
GpsSubscribeResult result = new GpsSubscribeResult(
|
||||
subscribeSid,
|
||||
GpsSubscribeConst.RESULT_SUCCESS,
|
||||
"GPS定位推送",
|
||||
GpsSubscribeConst.GPS_STATE_LOCATED,
|
||||
0,
|
||||
System.currentTimeMillis(),
|
||||
currentLat,
|
||||
currentLng,
|
||||
currentTime
|
||||
);
|
||||
mSubscribeManager.sendSubscribeResult(result);
|
||||
LogUtils.d(TAG, "推送GPS数据至订阅者 SID:" + subscribeSid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user