实现位置管理窗口实时位置显示。

This commit is contained in:
ZhanGSKen
2025-10-03 02:45:47 +08:00
parent ca953adec2
commit 00df478c32
2 changed files with 90 additions and 3 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Thu Oct 02 13:16:14 GMT 2025
#Thu Oct 02 18:42:32 GMT 2025
stageCount=8
libraryProject=
baseVersion=15.0
publishVersion=15.0.7
buildCount=29
buildCount=36
baseBetaVersion=15.0.8

View File

@@ -22,6 +22,8 @@ import cc.winboll.studio.positions.models.PositionTaskModel;
import cc.winboll.studio.positions.services.MainService;
import cc.winboll.studio.positions.R;
import java.util.ArrayList;
import cc.winboll.studio.libappbase.ToastUtils;
import android.widget.TextView;
/**
* Java 7 语法适配:
@@ -30,7 +32,7 @@ import java.util.ArrayList;
* 3. 所有位置/任务操作通过 MainService 接口执行
*/
public class LocationActivity extends Activity {
private static final String TAG = "LocationActivity";
public static final String TAG = "LocationActivity";
private RecyclerView mRvPosition;
private PositionAdapter mPositionAdapter;
@@ -40,6 +42,11 @@ public class LocationActivity extends Activity {
private MainService mMainService;
private boolean isServiceBound = false;
// ---------------------- 新增GPS监听核心变量 ----------------------
private MainService.GpsUpdateListener mGpsUpdateListener; // GPS监听实例
private PositionModel mCurrentGpsPos; // 缓存当前GPS位置供页面使用
// 服务连接Java 7 匿名内部类实现)
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
@@ -54,6 +61,7 @@ public class LocationActivity extends Activity {
syncDataFromMainService();
// 初始化Adapter传入MainService实例确保任务数据从服务获取
initPositionAdapter();
registerGpsListener();
}
@Override
@@ -75,6 +83,9 @@ public class LocationActivity extends Activity {
// 绑定MainService确保Activity启动时就拿到服务实例
bindMainService();
// 初始化GPS监听提前创建避免空指针
initGpsUpdateListener();
}
/**
@@ -193,6 +204,80 @@ public class LocationActivity extends Activity {
Toast.makeText(this, content, Toast.LENGTH_SHORT).show();
}
// ---------------------- 新增GPS监听初始化+注册/反注册(核心适配逻辑) ----------------------
/**
* 初始化GPS监听实现MainService.GpsUpdateListener接收实时GPS数据
*/
private void initGpsUpdateListener() {
LogUtils.d(TAG, "initGpsUpdateListener()");
mGpsUpdateListener = new MainService.GpsUpdateListener() {
// 回调1GPS位置更新实时接收经纬度更新缓存+刷新Adapter
@Override
public void onGpsPositionUpdated(PositionModel currentGpsPos) {
if (currentGpsPos == null) {
LogUtils.w(TAG, "GPS位置更新数据为空");
return;
}
// 缓存当前GPS位置供页面其他逻辑使用
mCurrentGpsPos = currentGpsPos;
LogUtils.d(TAG, String.format("收到GPS更新纬度=%.4f,经度=%.4f"
, currentGpsPos.getLatitude(), currentGpsPos.getLongitude()));
((TextView)findViewById(R.id.tv_latitude)).setText(String.format("当前纬度:%f", currentGpsPos.getLatitude()));
((TextView)findViewById(R.id.tv_longitude)).setText(String.format("当前经度:%f", currentGpsPos.getLongitude()));
// 1. 同步GPS位置到MainService确保服务数据与页面一致触发距离计算
if (mMainService != null) {
// mMainService.syncCurrentGpsPosition(currentGpsPos);
// // 2. 强制刷新距离计算+Adapter显示最新距离
// mMainService.forceRefreshDistance();
// refreshCachedDataAndAdapter();
}
// 3. 可选显示GPS位置Toast提示如调试场景
// ToastUtils.show("GPS更新" + currentGpsPos.getLatitude() + "," + currentGpsPos.getLongitude());
}
// 回调2GPS状态变化如开启/关闭、信号弱,提示用户)
@Override
public void onGpsStatusChanged(String status) {
if (status == null) return;
LogUtils.d(TAG, "GPS状态变化" + status);
// 显示GPS状态可通过TextView在页面上展示此处用Toast示例
if (status.contains("未开启") || status.contains("权限") || status.contains("失败")) {
// 异常状态:弹出提示引导用户处理
ToastUtils.show("GPS提示" + status);
}
}
};
}
/**
* 注册GPS监听调用MainService的PUBLIC方法绑定监听
*/
private void registerGpsListener() {
LogUtils.d(TAG, "registerGpsListener()");
if (mMainService == null || mGpsUpdateListener == null) {
LogUtils.w(TAG, "GPS监听注册失败服务未初始化或监听未创建");
return;
}
// 调用MainService的registerGpsUpdateListener方法注册
mMainService.registerGpsUpdateListener(mGpsUpdateListener);
LogUtils.d(TAG, "GPS监听已注册");
}
/**
* 反注册GPS监听调用MainService的PUBLIC方法解绑监听核心防内存泄漏
*/
private void unregisterGpsListener() {
if (mMainService == null || mGpsUpdateListener == null) {
LogUtils.w(TAG, "GPS监听反注册失败服务未初始化或监听未创建");
return;
}
// 调用MainService的unregisterGpsUpdateListener方法反注册
mMainService.unregisterGpsUpdateListener(mGpsUpdateListener);
LogUtils.d(TAG, "GPS监听已反注册");
}
@Override
protected void onDestroy() {
super.onDestroy();
@@ -207,6 +292,8 @@ public class LocationActivity extends Activity {
unbindService(mServiceConnection);
LogUtils.d(TAG, "MainService解绑完成");
}
unregisterGpsListener();
}
public static class LocalBinder extends android.os.Binder {