实现从文件读取自定义GPS位置的功能,增强了GPS定位的灵活性
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
--- a/frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
|
||||
+++ b/frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
|
||||
@@ -66,6 +66,11 @@
|
||||
@@ -66,6 +66,9 @@
|
||||
#include "jni.h"
|
||||
#include "utils/Log.h"
|
||||
#include "utils/misc.h"
|
||||
+#include <fstream>
|
||||
+#include <sstream>
|
||||
+#include <sys/stat.h>
|
||||
+
|
||||
+// Custom GPS location from file support
|
||||
|
||||
static jclass class_gnssPowerStats;
|
||||
|
||||
@@ -78,6 +83,15 @@
|
||||
@@ -75,6 +78,75 @@ static jmethodID method_isInEmergencySession;
|
||||
static jmethodID method_gnssPowerStatsCtor;
|
||||
static jmethodID method_setSubHalPowerIndicationCapabilities;
|
||||
|
||||
@@ -23,16 +21,6 @@
|
||||
+static time_t lastFileModTime = 0;
|
||||
+static const char* GPS_LOCATION_FILE = "/data/vendor/gps/custom_location.txt";
|
||||
+
|
||||
+// Function to read GPS coordinates from file
|
||||
+static bool readGpsLocationFromFile();
|
||||
+
|
||||
using android::OK;
|
||||
using android::sp;
|
||||
using android::status_t;
|
||||
@@ -200,6 +214,64 @@
|
||||
std::unique_ptr<android::gnss::MeasurementCorrectionsInterface> gnssMeasurementCorrectionsIface =
|
||||
nullptr;
|
||||
|
||||
+// Function to read GPS coordinates from file
|
||||
+static bool readGpsLocationFromFile() {
|
||||
+ struct stat fileStat;
|
||||
@@ -95,10 +83,10 @@
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
namespace android {
|
||||
|
||||
namespace {
|
||||
@@ -367,6 +439,9 @@
|
||||
using android::OK;
|
||||
using android::sp;
|
||||
using android::status_t;
|
||||
@@ -377,6 +449,9 @@ static jboolean android_location_gnss_hal_GnssNative_set_position_mode(
|
||||
}
|
||||
|
||||
static jboolean android_location_gnss_hal_GnssNative_start(JNIEnv* /* env */, jclass) {
|
||||
@@ -108,11 +96,16 @@
|
||||
return gnssHal->start();
|
||||
}
|
||||
|
||||
@@ -443,8 +518,17 @@
|
||||
@@ -457,12 +532,24 @@ static void android_location_gnss_hal_GnssNative_inject_best_location(
|
||||
jfloat speedAccuracyMetersPerSecond, jfloat bearingAccuracyDegrees, jlong timestamp,
|
||||
jint elapsedRealtimeFlags, jlong elapsedRealtimeNanos,
|
||||
jdouble elapsedRealtimeUncertaintyNanos) {
|
||||
- gnssHal->injectBestLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees,
|
||||
- altitudeMeters, speedMetersPerSec, bearingDegrees,
|
||||
- horizontalAccuracyMeters, verticalAccuracyMeters,
|
||||
- speedAccuracyMetersPerSecond, bearingAccuracyDegrees, timestamp,
|
||||
- elapsedRealtimeFlags, elapsedRealtimeNanos,
|
||||
- elapsedRealtimeUncertaintyNanos);
|
||||
+
|
||||
+ // Check for custom GPS location from file
|
||||
+ if (readGpsLocationFromFile()) {
|
||||
@@ -125,20 +118,24 @@
|
||||
+ elapsedRealtimeUncertaintyNanos);
|
||||
+ } else {
|
||||
+ gnssHal->injectBestLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees,
|
||||
altitudeMeters, speedMetersPerSec, bearingDegrees,
|
||||
horizontalAccuracyMeters, verticalAccuracyMeters,
|
||||
speedAccuracyMetersPerSecond, bearingAccuracyDegrees, timestamp,
|
||||
elapsedRealtimeFlags, elapsedRealtimeNanos,
|
||||
elapsedRealtimeUncertaintyNanos);
|
||||
+ altitudeMeters, speedMetersPerSec, bearingDegrees,
|
||||
+ horizontalAccuracyMeters, verticalAccuracyMeters,
|
||||
+ speedAccuracyMetersPerSecond, bearingAccuracyDegrees, timestamp,
|
||||
+ elapsedRealtimeFlags, elapsedRealtimeNanos,
|
||||
+ elapsedRealtimeUncertaintyNanos);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void android_location_gnss_hal_GnssNative_inject_location(
|
||||
@@ -455,8 +539,17 @@
|
||||
@@ -472,11 +559,22 @@ static void android_location_gnss_hal_GnssNative_inject_location(
|
||||
jfloat speedAccuracyMetersPerSecond, jfloat bearingAccuracyDegrees, jlong timestamp,
|
||||
jint elapsedRealtimeFlags, jlong elapsedRealtimeNanos,
|
||||
jdouble elapsedRealtimeUncertaintyNanos) {
|
||||
- gnssHal->injectLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees, altitudeMeters,
|
||||
- speedMetersPerSec, bearingDegrees, horizontalAccuracyMeters,
|
||||
- verticalAccuracyMeters, speedAccuracyMetersPerSecond,
|
||||
- bearingAccuracyDegrees, timestamp, elapsedRealtimeFlags,
|
||||
- elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos);
|
||||
+
|
||||
+ // Check for custom GPS location from file
|
||||
+ if (readGpsLocationFromFile()) {
|
||||
@@ -150,10 +147,10 @@
|
||||
+ elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos);
|
||||
+ } else {
|
||||
+ gnssHal->injectLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees, altitudeMeters,
|
||||
speedMetersPerSec, bearingDegrees, horizontalAccuracyMeters,
|
||||
verticalAccuracyMeters, speedAccuracyMetersPerSecond,
|
||||
bearingAccuracyDegrees, timestamp, elapsedRealtimeFlags,
|
||||
elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos);
|
||||
+ speedMetersPerSec, bearingDegrees, horizontalAccuracyMeters,
|
||||
+ verticalAccuracyMeters, speedAccuracyMetersPerSecond,
|
||||
+ bearingAccuracyDegrees, timestamp, elapsedRealtimeFlags,
|
||||
+ elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos);
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user