From d025fb4f132efc1aa6be31053e97da0171a5ee02 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 3 Apr 2025 14:11:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AE=9A=E4=BD=8D=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=95=B0=E6=8D=AE=E8=AF=B7=E6=B1=82=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.properties | 4 +- positions/src/main/AndroidManifest.xml | 6 +- .../studio/positions/MainActivity.java | 11 +- .../fragments/PositionsFragment.java | 311 +++++++++++------- .../positions/fragments/TXMSFragment.java | 13 +- .../listeners/OnGPSRTLocationListener.java | 17 + .../listeners/OnTXRTLocationListener.java | 16 + .../studio/positions/services/GPSService.java | 108 ++++++ .../main/res/layout/fragment_positions.xml | 124 ++----- 9 files changed, 378 insertions(+), 232 deletions(-) create mode 100644 positions/src/main/java/cc/winboll/studio/positions/listeners/OnGPSRTLocationListener.java create mode 100644 positions/src/main/java/cc/winboll/studio/positions/listeners/OnTXRTLocationListener.java create mode 100644 positions/src/main/java/cc/winboll/studio/positions/services/GPSService.java diff --git a/positions/build.properties b/positions/build.properties index 0137727..1fa8f60 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Apr 03 03:19:30 GMT 2025 +#Thu Apr 03 06:08:46 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=375 +buildCount=382 baseBetaVersion=1.0.1 diff --git a/positions/src/main/AndroidManifest.xml b/positions/src/main/AndroidManifest.xml index 8ba3a8c..2c9bb18 100644 --- a/positions/src/main/AndroidManifest.xml +++ b/positions/src/main/AndroidManifest.xml @@ -25,7 +25,7 @@ - + @@ -739,6 +739,8 @@ + + - + \ No newline at end of file diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java index 13c14ce..da50159 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java @@ -36,6 +36,8 @@ import cc.winboll.studio.positions.models.MainServiceBean; import com.google.android.material.tabs.TabLayout; import java.util.ArrayList; import java.util.List; +import cc.winboll.studio.positions.listeners.OnTXRTLocationListener; +import android.location.Location; final public class MainActivity extends AbsActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { @@ -112,7 +114,7 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, fragmentList.add(mLogFragment); tabTitleList.add("日志"); - + // 设置ViewPager的适配器 MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); @@ -120,6 +122,13 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, // 关联TabLayout和ViewPager tabLayout.setupWithViewPager(viewPager); + + mTXMSFragment.setOnTXRTLocationListener(new OnTXRTLocationListener(){ + @Override + public void onTXRTLocation(Location location) { + mPositionsFragment.showLocationTX(location); + } + }); } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java index 04cc742..0832317 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java @@ -34,6 +34,13 @@ import cc.winboll.studio.positions.utils.LocationFusion; import cc.winboll.studio.positions.utils.TimeUtils; import android.widget.EditText; import android.widget.Switch; +import android.content.Intent; +import cc.winboll.studio.positions.services.GPSService; +import android.content.Context; +import android.content.ServiceConnection; +import android.content.ComponentName; +import android.os.IBinder; +import cc.winboll.studio.positions.listeners.OnGPSRTLocationListener; public class PositionsFragment extends Fragment { @@ -44,10 +51,13 @@ public class PositionsFragment extends Fragment { private LocationManager locationManager; - static MyHandler _MyHandler; + //MyHandler mMyHandler; TextView mtvTXMyLocationInfo; - TextView mtvPhoneMyLocationInfo; + TextView mtvPhoneGPSInfo; + MyServiceConnection mMyServiceConnection; + GPSService mGPSService; + TextView mtvPostionFixModelInfo; TextView mtvLockPostionInfo; @@ -64,8 +74,8 @@ public class PositionsFragment extends Fragment { double longitudeFuseLock; PostionFixModel mPostionFixModel; - static Location _LocationTX; - static Location _LocationPhoneGPS; + Location mLocationTX; + Location mLocationPhoneGPS; static Location _LocationPhoneGPSLock; LocationManager locationManagerPhoneGPS; @@ -95,29 +105,33 @@ public class PositionsFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View viewMain = inflater.inflate(R.layout.fragment_positions, container, false); - - nCurrentFixActivationCountValue = 0; - nGPSUpdateCount = 0; - -// Toolbar toolbar = viewMain.findViewById(R.id.toolbar); -// getActivity().getMenuInflater().inflate(R.menu.toolbar_positions, toolbar.getMenu()); -// + mtvTXMyLocationInfo = viewMain.findViewById(R.id.txmylocationinfo_tv); - mtvPhoneMyLocationInfo = viewMain.findViewById(R.id.phonemylocationinfo_tv); - mtvPostionFixModelInfo = viewMain.findViewById(R.id.postionfixmodelinfo_tv); - mtvLockPostionInfo = viewMain.findViewById(R.id.lockpostioninfo_tv); + mtvPhoneGPSInfo = viewMain.findViewById(R.id.phonegpsinfo_tv); + mMyServiceConnection = new MyServiceConnection(); + + Intent intent = new Intent(getActivity(), GPSService.class); + getActivity().startService(intent); + getActivity().bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT); + +// metLockLatitude = viewMain.findViewById(R.id.locklatitude_et); +// metLockLongitude = viewMain.findViewById(R.id.locklongitude_et); +// metLockLatitude.setEnabled(false); +// metLockLongitude.setEnabled(false); +// mswTaskService = viewMain.findViewById(R.id.taskservice_sw); + + //mMyHandler = new MyHandler(); + + //nCurrentFixActivationCountValue = 0; + //nGPSUpdateCount = 0; - metLockLatitude = viewMain.findViewById(R.id.locklatitude_et); - metLockLongitude = viewMain.findViewById(R.id.locklongitude_et); - metLockLatitude.setEnabled(false); - metLockLongitude.setEnabled(false); + +// mtvPostionFixModelInfo = viewMain.findViewById(R.id.postionfixmodelinfo_tv); +// mtvLockPostionInfo = viewMain.findViewById(R.id.lockpostioninfo_tv); +// + + //locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); -// tvWifiLocation = viewMain.findViewById(R.id.wifi_position_tv); -// tvGPSLocation = viewMain.findViewById(R.id.gps_position_tv); -// tvFuseLocation = viewMain.findViewById(R.id.fuse_position_tv); - locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); - - mswTaskService = viewMain.findViewById(R.id.taskservice_sw); // mswTaskService.setOnClickListener(new View.OnClickListener(){ // @Override // public void onClick(View p1) { @@ -126,18 +140,18 @@ public class PositionsFragment extends Fragment { // }); // 请求GPS定位 - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, phoneGPSLocationListener); + //locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, phoneGPSLocationListener); // 请求基站(网络)定位 - locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener); + //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener); - _MyHandler = new MyHandler(); //ToastUtils.show("PositionsFragment onCreateView"); - showLocationTX(); - showLocationPhoneGPS(); - showPostionFixModelInfo(); + //showLocationTX(); + //showLocationPhoneGPS(); + //showPostionFixModelInfo(); + return viewMain; } @@ -150,64 +164,83 @@ public class PositionsFragment extends Fragment { _LocationPhoneGPSLock.setLongitude(Double.parseDouble(metLockLongitude.getText().toString())); //ToastUtils.show("定位手动设定位置"); } else { - Location locationFix = fixGPSLocationFromPostionFixModel(_LocationPhoneGPS); + //Location locationFix = fixGPSLocationFromPostionFixModel(_LocationPhoneGPS); //_LocationPhoneGPSLock = _LocationTX; - _LocationPhoneGPSLock = locationFix; + //_LocationPhoneGPSLock = locationFix; //ToastUtils.show("定位GPS设定位置"); } - showLockPostionInfo(); + //showLockPostionInfo(); //ToastUtils.show(String.format("%s", locationFix.toString())); TXMSFragment.moveToLocation(_LocationPhoneGPSLock.getLatitude(), _LocationPhoneGPSLock.getLongitude()); } - void showLocationPhoneGPS() { - if (_LocationPhoneGPS != null) { - String szTemp = String.format("\n(%d)PhoneGPS MyLocation Info\nLatitude %f\nLongitude %f\nAccuracy %f\n", nGPSUpdateCount, _LocationPhoneGPS.getLatitude(), _LocationPhoneGPS.getLongitude(), _LocationPhoneGPS.getAccuracy()); - mtvPhoneMyLocationInfo.append(szTemp); - LogUtils.d(TAG, szTemp); - } - } +// void showLocationPhoneGPS(Location location) { +// if (location != null) { +// mLocationPhoneGPS = location; +// String szTemp = String.format("\n(%d)PhoneGPS MyLocation Info\nLatitude %f\nLongitude %f\nAccuracy %f\n", nGPSUpdateCount, _LocationPhoneGPS.getLatitude(), _LocationPhoneGPS.getLongitude(), _LocationPhoneGPS.getAccuracy()); +// mtvPhoneMyLocationInfo.append(szTemp); +// LogUtils.d(TAG, szTemp); +// } +// } - void showPostionFixModelInfo() { - if (mPostionFixModel != null && _LocationTX != null && _LocationPhoneGPS != null) { - String szTemp = String.format("\n(%d)FixModel Info\nLatitude TX %f\nLatitude GPS %f\nLatitude Fix %f\nLongitude TX %f\nLongitude GPS %f\nLongitude Fix %f\n\n", - nCurrentFixActivationCountValue, - _LocationTX.getLatitude(), - _LocationPhoneGPS.getLatitude(), - mPostionFixModel.getLatitudeFixModel(), - _LocationTX.getLongitude(), - _LocationPhoneGPS.getLongitude(), - mPostionFixModel.getLongitudeFixModel()); - mtvPostionFixModelInfo.append(szTemp); - LogUtils.d(TAG, szTemp); - } - } +// void showPostionFixModelInfo() { +// if (mPostionFixModel != null && mLocationTX != null && _LocationPhoneGPS != null) { +// String szTemp = String.format("\n(%d)FixModel Info\nLatitude TX %f\nLatitude GPS %f\nLatitude Fix %f\nLongitude TX %f\nLongitude GPS %f\nLongitude Fix %f\n\n", +// nCurrentFixActivationCountValue, +// mLocationTX.getLatitude(), +// _LocationPhoneGPS.getLatitude(), +// mPostionFixModel.getLatitudeFixModel(), +// mLocationTX.getLongitude(), +// _LocationPhoneGPS.getLongitude(), +// mPostionFixModel.getLongitudeFixModel()); +// mtvPostionFixModelInfo.append(szTemp); +// LogUtils.d(TAG, szTemp); +// } +// } - void showLockPostionInfo() { - if (mPostionFixModel != null && _LocationTX != null && _LocationPhoneGPSLock != null) { - String szTemp = String.format("\n%s\nFixModel Info\nLatitude TX %f\nLatitude GPS %f\nLatitude Fix %f\nLatitude GPSLock %f\nLongitude TX %f\nLongitude GPS %f\nLongitude Fix %f\nLongitude GPSLock %f\n\n", - TimeUtils.getCurrentTimeString(), - _LocationTX.getLatitude(), - _LocationPhoneGPS.getLatitude(), - mPostionFixModel.getLatitudeFixModel(), - _LocationPhoneGPSLock.getLatitude(), - _LocationTX.getLongitude(), - _LocationPhoneGPS.getLongitude(), - mPostionFixModel.getLongitudeFixModel(), - _LocationPhoneGPSLock.getLongitude()); - mtvLockPostionInfo.append(szTemp); - LogUtils.d(TAG, szTemp); - } - } +// void showLockPostionInfo() { +// if (mPostionFixModel != null && mLocationTX != null && _LocationPhoneGPSLock != null) { +// String szTemp = String.format("\n%s\nFixModel Info\nLatitude TX %f\nLatitude GPS %f\nLatitude Fix %f\nLatitude GPSLock %f\nLongitude TX %f\nLongitude GPS %f\nLongitude Fix %f\nLongitude GPSLock %f\n\n", +// TimeUtils.getCurrentTimeString(), +// mLocationTX.getLatitude(), +// _LocationPhoneGPS.getLatitude(), +// mPostionFixModel.getLatitudeFixModel(), +// _LocationPhoneGPSLock.getLatitude(), +// mLocationTX.getLongitude(), +// _LocationPhoneGPS.getLongitude(), +// mPostionFixModel.getLongitudeFixModel(), +// _LocationPhoneGPSLock.getLongitude()); +// mtvLockPostionInfo.append(szTemp); +// LogUtils.d(TAG, szTemp); +// } +// } - void showLocationTX() { - if (_LocationTX != null) { - String szTemp = String.format("TX MyLocation Init Info\nLatitude %f, Longitude %f, Accuracy %f", _LocationTX.getLatitude(), _LocationTX.getLongitude(), _LocationTX.getAccuracy()); +// void showLocationTX() { +// if (_LocationTX != null) { +// String szTemp = String.format("TX MyLocation Init Info\nLatitude %f, Longitude %f, Accuracy %f", _LocationTX.getLatitude(), _LocationTX.getLongitude(), _LocationTX.getAccuracy()); +// mtvTXMyLocationInfo.setText(szTemp); +// LogUtils.d(TAG, szTemp); +// } +// } + + public void showLocationTX(Location location) { + if (location != null) { + mLocationTX = location; + String szTemp = String.format("TX MyLocation Info\nLatitude %f, Longitude %f\nAccuracy %f", mLocationTX.getLatitude(), mLocationTX.getLongitude(), mLocationTX.getAccuracy()); mtvTXMyLocationInfo.setText(szTemp); LogUtils.d(TAG, szTemp); } } + + public void showLocationPhoneGPS(Location location) { + if (location != null) { + mLocationPhoneGPS = location; + String szTemp = String.format("Phone GPS Info\nLatitude %f, Longitude %f\nAccuracy %f", mLocationPhoneGPS.getLatitude(), mLocationPhoneGPS.getLongitude(), mLocationPhoneGPS.getAccuracy()); + mtvPhoneGPSInfo.setText(szTemp); + LogUtils.d(TAG, szTemp); + } + } @Override public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { @@ -243,38 +276,38 @@ public class PositionsFragment extends Fragment { return super.onOptionsItemSelected(item); } - void updatePostionFixModel() { - if (_LocationPhoneGPS == null - || _LocationTX == null) { - return; - } - - nCurrentFixActivationCountValue++; - if (nCurrentFixActivationCountValue < nFixActivationCountValue) { - mPostionFixModel = PostionFixModel.loadPostionFixModel(); - mPostionFixModel.setLatitudeFixModel(_LocationPhoneGPS.getLatitude() - _LocationTX.getLatitude()); - mPostionFixModel.setLongitudeFixModel(_LocationPhoneGPS.getLongitude() - _LocationTX.getLongitude()); - -// String szTemp = String.format("PostionFixModel Info\nLatitude Fix %f, Longitude Fix %f", mPostionFixModel.getLatitudeFixModel(), mPostionFixModel.getLongitudeFixModel()); -// mtvPostionFixModelInfo.setText(szTemp); -// LogUtils.d(TAG, szTemp); - PostionFixModel.savePostionFixModel(mPostionFixModel); - //ToastUtils.show(szTemp); - LogUtils.d(TAG, String.format("updatePostionFixModel() run %d", nCurrentFixActivationCountValue)); - - showPostionFixModelInfo(); - } else { - // 定位修复模型数据定型, GPS定位监听停止 - // 在需要停止监听的地方(如onPause/onDestroy)添加: - if (locationManagerPhoneGPS != null) { - // 取消位置更新监听 - locationManagerPhoneGPS.removeUpdates(phoneGPSLocationListener); - // 可选:停止后释放资源 - phoneGPSLocationListener = null; - } - LogUtils.d(TAG, String.format("updatePostionFixModel() stop %d", nCurrentFixActivationCountValue)); - } - } +// void updatePostionFixModel() { +// if (_LocationPhoneGPS == null +// || mLocationTX == null) { +// return; +// } +// +// nCurrentFixActivationCountValue++; +// if (nCurrentFixActivationCountValue < nFixActivationCountValue) { +// mPostionFixModel = PostionFixModel.loadPostionFixModel(); +// mPostionFixModel.setLatitudeFixModel(_LocationPhoneGPS.getLatitude() - mLocationTX.getLatitude()); +// mPostionFixModel.setLongitudeFixModel(_LocationPhoneGPS.getLongitude() - mLocationTX.getLongitude()); +// +//// String szTemp = String.format("PostionFixModel Info\nLatitude Fix %f, Longitude Fix %f", mPostionFixModel.getLatitudeFixModel(), mPostionFixModel.getLongitudeFixModel()); +//// mtvPostionFixModelInfo.setText(szTemp); +//// LogUtils.d(TAG, szTemp); +// PostionFixModel.savePostionFixModel(mPostionFixModel); +// //ToastUtils.show(szTemp); +// LogUtils.d(TAG, String.format("updatePostionFixModel() run %d", nCurrentFixActivationCountValue)); +// +// showPostionFixModelInfo(); +// } else { +// // 定位修复模型数据定型, GPS定位监听停止 +// // 在需要停止监听的地方(如onPause/onDestroy)添加: +// if (locationManagerPhoneGPS != null) { +// // 取消位置更新监听 +// locationManagerPhoneGPS.removeUpdates(phoneGPSLocationListener); +// // 可选:停止后释放资源 +// phoneGPSLocationListener = null; +// } +// LogUtils.d(TAG, String.format("updatePostionFixModel() stop %d", nCurrentFixActivationCountValue)); +// } +// } private Location fixGPSLocationFromPostionFixModel(Location location) { // 用腾讯定位数据与GPS定位数据的数据差修复模型,来修复一下GPS定位数据。 @@ -356,15 +389,15 @@ public class PositionsFragment extends Fragment { // tvGPSLocation.setText(String.format("GPS [ Latitude: %f \nLongitude: %f ]", latitudeGPSLock, longitudeGPSLock)); // fuseLocationData(); - _LocationPhoneGPS = location; + //_LocationPhoneGPS = location; // 位置变化时的处理逻辑 // double latitude = location.getLatitude(); // double longitude = location.getLongitude(); // String szTemp = String.format("Phone GPS MyLocation Init Info\nLatitude %f, Longitude %f, Accuracy %f", _LocationPhoneGPS.getLatitude(), _LocationPhoneGPS.getLongitude(), _LocationPhoneGPS.getAccuracy()); // mtvPhoneMyLocationInfo.setText(szTemp); // LogUtils.d(TAG, szTemp); - showLocationPhoneGPS(); - updatePostionFixModel(); + //showLocationPhoneGPS(); + //updatePostionFixModel(); if(mswTaskService.isChecked()) { moveToCurrentLocation(); } @@ -389,29 +422,51 @@ public class PositionsFragment extends Fragment { //tvFuseLocation.setText(String.format("Fuse [ Latitude: %f \nLongitude: %f ]", latitudeFuseLock, longitudeFuseLock)); } - public static final int INIT_POSITION = 1; - class MyHandler extends Handler { +// public static final int INIT_POSITION = 1; +// class MyHandler extends Handler { +// @Override +// public void handleMessage(@NonNull Message msg) { +// switch (msg.what) { +// case INIT_POSITION: +// // 在这里处理接收到消息后的逻辑,比如更新 UI +// mLocationTX = (Location)msg.obj; +// //showLocationTX(); +// +// break; +// default: +// break; +// } +// } +// }; + +// public void sendInitPositioningMessage(Location location) { +// if (mMyHandler != null) { +// Message message = Message.obtain(); +// message.what = INIT_POSITION; +// message.obj = location; +// mMyHandler.sendMessage(message); +// } +// } + + private class MyServiceConnection implements ServiceConnection { @Override - public void handleMessage(@NonNull Message msg) { - switch (msg.what) { - case INIT_POSITION: - // 在这里处理接收到消息后的逻辑,比如更新 UI - _LocationTX = (Location)msg.obj; - showLocationTX(); - - break; - default: - break; - } + public void onServiceConnected(ComponentName name, IBinder service) { + LogUtils.d(TAG, "onServiceConnected(...)"); + GPSService.MyBinder binder = (GPSService.MyBinder) service; + mGPSService = binder.getService(); + mGPSService.setOnGPSRTLocationListener(new OnGPSRTLocationListener(){ + @Override + public void onGPSRTLocation(Location location) { + showLocationPhoneGPS(location); + } + }); } - }; - public static void sendInitPositioningMessage(Location location) { - if (_MyHandler != null) { - Message message = Message.obtain(); - message.what = INIT_POSITION; - message.obj = location; - _MyHandler.sendMessage(message); + @Override + public void onServiceDisconnected(ComponentName name) { + LogUtils.d(TAG, "onServiceDisconnected(...)"); + mGPSService = null; } + } } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java index a849b21..9a8de52 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java @@ -55,6 +55,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; import java.util.ArrayList; +import cc.winboll.studio.positions.listeners.OnTXRTLocationListener; public class TXMSFragment extends Fragment implements /*EasyPermissions.PermissionCallbacks,*/LocationSource, TencentLocationListener,TencentMap.OnMapClickListener { @@ -78,7 +79,8 @@ public class TXMSFragment extends Fragment implements /*EasyPermissions.Permissi ArrayList locationPostionModelList; //Location lastLocation; static TXMSFragment _TXMSFragment; - + OnTXRTLocationListener mOnTXRTLocationListener; + @Nullable @Override @@ -369,8 +371,10 @@ public class TXMSFragment extends Fragment implements /*EasyPermissions.Permissi message.what = TXMSFragment.REALTIME_POSITIONING; handler.sendMessage(message); } - - + + public void setOnTXRTLocationListener(OnTXRTLocationListener listener) { + mOnTXRTLocationListener = listener; + } /** @@ -435,7 +439,8 @@ public class TXMSFragment extends Fragment implements /*EasyPermissions.Permissi // lastLocation.setLongitude(tencentLocation.getLongitude()); // lastLocation.setAccuracy(tencentLocation.getAccuracy()); - PositionsFragment.sendInitPositioningMessage(locationTX); + //PositionsFragment.sendInitPositioningMessage(locationTX); + mOnTXRTLocationListener.onTXRTLocation(locationTX); // 当不再需要定位时 // 取消定位监听 diff --git a/positions/src/main/java/cc/winboll/studio/positions/listeners/OnGPSRTLocationListener.java b/positions/src/main/java/cc/winboll/studio/positions/listeners/OnGPSRTLocationListener.java new file mode 100644 index 0000000..e7766b8 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/listeners/OnGPSRTLocationListener.java @@ -0,0 +1,17 @@ +package cc.winboll.studio.positions.listeners; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/04/03 14:01:18 + * @Describe 手机 GPS 实时位置监听类 + */ +import android.location.Location; + +public interface OnGPSRTLocationListener { + + public static final String TAG = "OnGPSRTLocationListener"; + + void onGPSRTLocation(Location location); + + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/listeners/OnTXRTLocationListener.java b/positions/src/main/java/cc/winboll/studio/positions/listeners/OnTXRTLocationListener.java new file mode 100644 index 0000000..7b23b96 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/listeners/OnTXRTLocationListener.java @@ -0,0 +1,16 @@ +package cc.winboll.studio.positions.listeners; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/04/03 13:06:13 + * @Describe 位置监听类 + */ +import android.location.Location; + +public interface OnTXRTLocationListener { + + public static final String TAG = "OnTXRTLocationListener"; + + void onTXRTLocation(Location location); + +} diff --git a/positions/src/main/java/cc/winboll/studio/positions/services/GPSService.java b/positions/src/main/java/cc/winboll/studio/positions/services/GPSService.java new file mode 100644 index 0000000..7f583cf --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/services/GPSService.java @@ -0,0 +1,108 @@ +package cc.winboll.studio.positions.services; + +import android.Manifest; +import android.app.Service; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import androidx.core.app.ActivityCompat; +import cc.winboll.studio.positions.listeners.OnGPSRTLocationListener; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/04/03 12:13:23 + * @Describe 获取实时 GPS 数据的服务 + */ +public class GPSService extends Service { + + public static final String TAG = "GPSService"; + + OnGPSRTLocationListener mOnGPSRTLocationListener; + LocationManager locationManager; + Location mLocationPhoneGPS; + Location mLocationNetwork; + + @Override + public IBinder onBind(Intent intent) { + return new MyBinder(); + } + + // 用于返回服务实例的Binder + public class MyBinder extends Binder { + public GPSService getService() { + return GPSService.this; + } + } + + @Override + public void onCreate() { + super.onCreate(); + + locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); + // 请求GPS定位 + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, phoneGPSLocationListener); + // 请求基站(网络)定位 + locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (locationManager != null) { + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && + ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + return; + } + locationManager.removeUpdates(phoneGPSLocationListener); + locationManager.removeUpdates(networkLocationListener); + } + } + + public void setOnGPSRTLocationListener(OnGPSRTLocationListener listener) { + mOnGPSRTLocationListener = listener; + } + + private LocationListener phoneGPSLocationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + // 处理GPS定位结果 + if (location != null && mOnGPSRTLocationListener != null) { + mLocationPhoneGPS = location; + mOnGPSRTLocationListener.onGPSRTLocation(mLocationPhoneGPS); + } + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) {} + + @Override + public void onProviderEnabled(String provider) {} + + @Override + public void onProviderDisabled(String provider) {} + }; + + private LocationListener networkLocationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + // 处理基站(网络)定位结果 + if (location != null) { + mLocationNetwork = location; + } + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) {} + + @Override + public void onProviderEnabled(String provider) {} + + @Override + public void onProviderDisabled(String provider) {} + }; +} diff --git a/positions/src/main/res/layout/fragment_positions.xml b/positions/src/main/res/layout/fragment_positions.xml index 2fdcbed..bd25de6 100644 --- a/positions/src/main/res/layout/fragment_positions.xml +++ b/positions/src/main/res/layout/fragment_positions.xml @@ -6,110 +6,44 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +