From 04cc032e6d4815c93479a771d2f98526ed64724e Mon Sep 17 00:00:00 2001 From: changzuozhen Date: Mon, 26 Apr 2021 16:20:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8D=E5=B0=84=20GpsStatus=20bug=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aop/location/GpsStatusUtil.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/location/GpsStatusUtil.java b/Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/location/GpsStatusUtil.java index ffb2e4a7..da4c8710 100644 --- a/Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/location/GpsStatusUtil.java +++ b/Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/location/GpsStatusUtil.java @@ -6,6 +6,7 @@ import android.util.SparseArray; import com.didichuxing.doraemonkit.kit.gpsmock.GpsMockManager; +import java.lang.reflect.Constructor; import java.lang.reflect.Field; /** @@ -18,6 +19,7 @@ import java.lang.reflect.Field; * ================================================ */ public class GpsStatusUtil { + /** * status 包装 * @@ -36,24 +38,31 @@ public class GpsStatusUtil { public static void modifyGpsStatus(GpsStatus gpsStatus) { try { Class gpsStatusCls = (Class) gpsStatus.getClass(); - Field mSatellitesField = gpsStatusCls.getField("mSatellites"); + Field mSatellitesField = gpsStatusCls.getDeclaredField("mSatellites"); mSatellitesField.setAccessible(true); SparseArray mSatellites = new SparseArray<>(); Class satliteClass = (Class) Class.forName("android.location.GpsSatellite"); - GpsSatellite satellite = satliteClass.newInstance(); - Field mUsedInFixField = satliteClass.getField("mUsedInFix"); + Constructor satliteClassConstructor = satliteClass.getDeclaredConstructor(int.class); + + Field mUsedInFixField = satliteClass.getDeclaredField("mUsedInFix"); mUsedInFixField.setAccessible(true); + Field mValidField = satliteClass.getDeclaredField("mValid"); + mValidField.setAccessible(true); + Field mHasEphemerisField = satliteClass.getDeclaredField("mHasEphemeris"); + mHasEphemerisField.setAccessible(true); + Field mHasAlmanacField = satliteClass.getDeclaredField("mHasAlmanac"); + mHasAlmanacField.setAccessible(true); + + GpsSatellite satellite = satliteClassConstructor.newInstance(-5); mUsedInFixField.set(satellite, true); - Field mPrnField = satliteClass.getField("mPrn"); - mPrnField.setAccessible(true); - mPrnField.setInt(satellite, -5); - - mSatellites.append(0, satellite); - mSatellites.append(0, satellite); - mSatellites.append(0, satellite); - mSatellites.append(0, satellite); - mSatellites.append(0, satellite); + mValidField.set(satellite, true); + mHasEphemerisField.set(satellite, true); + mHasAlmanacField.set(satellite, true); + + for (int i = 0; i < 12; i++) { + mSatellites.append(i, satellite); + } mSatellitesField.set(gpsStatus, mSatellites); } catch (Exception e) { -- GitLab