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 ffb2e4a7ec651e3c2d4e088e5b4c03233bd71f1c..da4c871075b68853b68933a1552a95a9bad6d6a6 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) {