Свой источник GPS координат

170
20 сентября 2019, 04:50

Устройство работает на Android 4.4. Приложение будет системным и будет подписан тем же сертификатом что и система.

Есть внешний источник GPS(свой протокол обмена, я получаю через протокол данные о координатах). p.s. На устройстве нету своего GPS приемника(не будет антены, а механизм в андроиде заложен)!

Как я могу сделать источником GPS свой некий метод?

Например, в приложении будет такое:

void getGps(){
  gps = call();
  deviceGPS = gps;// какое то чудо, и устройство подумало что со спутников GPS пришли новые данные.    
}

Что та типа Fake GPS, но работать должно без всяких манипуляций с устройством и без ROOT

Сейчас использую такой вариант(но опять таки есть необходимость использовать режим разработчика)

public class FakeLocation {
    private LocationManager locMgr;
    private Context appContext;
    private static FakeLocation singleton;
    private FakeLocation(Context context){
        singleton = this;
        this.appContext = context.getApplicationContext();
        this.locMgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        if (Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0){
            if (BuildConfig.DEBUG) Toast.makeText(context, "Включаем MOCK", Toast.LENGTH_SHORT).show();
            Settings.Secure.putInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 1);
        }
    }
    public static FakeLocation getSingleton(){
        if (singleton == null) new FakeLocation(ThisApplication.getSingleton());
        return singleton;
    }
    public void setMockLocation(double latitude, double longitude, float accuracy) {
        if (Settings.Secure.getInt(this.appContext.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0){
            return;
        }
        locMgr.addTestProvider (LocationManager.GPS_PROVIDER,
                "requiresNetwork" == "",
                "requiresSatellite" == "",
                "requiresCell" == "",
                "hasMonetaryCost" == "",
                "supportsAltitude" == "",
                "supportsSpeed" == "",
                "supportsBearing" == "",
                android.location.Criteria.POWER_LOW,
                android.location.Criteria.ACCURACY_FINE);
        Location newLocation = new Location(LocationManager.GPS_PROVIDER);
        newLocation.setLatitude(latitude);
        newLocation.setLongitude(longitude);
        newLocation.setAccuracy(accuracy);
        newLocation.setAltitude(0);
        newLocation.setTime(System.currentTimeMillis());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
        }
        locMgr.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
        locMgr.setTestProviderStatus(LocationManager.GPS_PROVIDER,
                LocationProvider.AVAILABLE,null, System.currentTimeMillis());
        locMgr.setTestProviderLocation(LocationManager.GPS_PROVIDER, newLocation);}
}
READ ALSO
api json запись на сервер

api json запись на сервер

Есть таблица Report и таблица Recipe, которые имеют стандартную всязь один к многим, те

112
Удалене объектов с одинаковыми полями

Удалене объектов с одинаковыми полями

У меня ест ькласс Human c полями

162
Linked list и работа с объектом

Linked list и работа с объектом

Видел что именно так надо объявлять и так правильней

118
Считывание нажатий виртуальной клавиатуры

Считывание нажатий виртуальной клавиатуры

Как считывать нажатия кнопок в виртуальной клавиатуре телефона? К примеру я нажал "Enter" и появился тоаст "Вы нажали ентер"Либо нажал на какой-нибудь...

104