更新定位服务数据请求结构
This commit is contained in:
parent
58ae10f93d
commit
d025fb4f13
@ -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
|
||||
|
@ -25,7 +25,7 @@
|
||||
<!-- 只能在前台获取精确的位置信息 -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
|
||||
<!-- 只能在前台获取大概位置(基于网络) -->
|
||||
<!-- 只有在前台运行时才能获取大致位置信息 -->
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
|
||||
<!-- 连接WLAN网络和断开连接 -->
|
||||
@ -739,6 +739,8 @@
|
||||
|
||||
<activity android:name="cc.winboll.studio.positions.activities.JointPositioningActivity"/>
|
||||
|
||||
<service android:name="cc.winboll.studio.positions.services.GPSService"/>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
</manifest>
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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<PostionModel> 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);
|
||||
|
||||
// 当不再需要定位时
|
||||
// 取消定位监听
|
||||
|
@ -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);
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
@ -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) {}
|
||||
};
|
||||
}
|
@ -6,110 +6,44 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txmylocationinfo_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textSize="10sp"
|
||||
android:background="#C0FFFFFF">
|
||||
|
||||
</TextView>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#FFC4EF9E">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/phonemylocationinfo_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textSize="10sp">
|
||||
|
||||
</TextView>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#FFABE2F7">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/postionfixmodelinfo_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textSize="10sp">
|
||||
|
||||
</TextView>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="150dp">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1.0"
|
||||
android:background="#FFADA4FD">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lockpostioninfo_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textSize="10sp">
|
||||
|
||||
</TextView>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="150dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="10dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Text"
|
||||
android:id="@+id/txmylocationinfo_tv"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="10dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Text"
|
||||
android:id="@+id/phonegpsinfo_tv"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
|
Loading…
x
Reference in New Issue
Block a user