Autore Topic: Gps, database Sqlite, "settings.db"  (Letto 613 volte)

Offline Mtx4

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Gps, database Sqlite, "settings.db"
« il: 28 Marzo 2012, 13:21:52 CEST »
0
Salve
è il mio primo post in questo forum specializzato, spero riusciate ad aiutarmi. Spiego brevemente il problema e la situazione.
Un terminale android è affetto da un baco nell'uso del Gps, per qualche motivo esclusivamente software, il sistema va alla ricerca di dati sulle effemeridi ogni 5 minuti di utilizzo del programma di navigazione. Fin qui nulla di estremamente anomalo, navigazione assistita.
Tuttavia il sistema cerca questi dati dalla rete cellulare anche se sul terminale i dati sono disabilitati e la sim non è abilitata al traffico web di alcun tipo. Questo risulta in una caduta del segnale gps ogni 5 minuti esatti. Lo stesso non accade in modalità aereo, quando secondo il sistema non c'è modo di comunicare con la rete. In breve questo è il bug che devo fixare.

Non posso specificare la fonte ma è sicura al 1000%, e mi è stato consigliato di modificare il file settings.db di android localizzato in questo percorso
data/data/com.android.providers.settings/databases/settings.db
con un semplice programmino come SQL lite browser, tramite il quale avrei dovuto aprire il database, andare nella sezione "Browse data" nella tabella "secure", e modificare il valore del campo "assisted_gps_enabled" da "1" a "0". Ciò avrebbe portato ad una disattivazione del modo "assistito" gps, per utilizzare il tradizionale "standalone" senza uso di traffico dati, escludendo dunque il baco.
(Il gps infatti con una precedente versione software funzionava benissimo, e il fatto che funzioni anche col baco ma solo in modo aereo, mostra che chiaramente il problema è software.)

Arrivati a questo punto vi chiedo se ho proceduto bene, o c'è qualche errore concettuale ... qui allego immagine del programma con il database aperto e il valore della riga d'interesse evidenziata in verde


di seguito invece quella che dovrebbe essere la parte di codice relativa a questo aspetto
non so bene se evidenzia il comportamento del bug o solo la modalità di lavoro del Gps

private void startNavigating(boolean singleShot) {
       
        if (!mStarted) {
           
            if (DEBUG) Log.d(TAG, "startNavigating");
            mStarted = true;
            mSingleShot = singleShot;
            mPositionMode = GPS_POSITION_MODE_STANDALONE;

             if (Settings.Secure.getInt(mContext.getContentResolver(),
                    Settings.Secure.ASSISTED_GPS_ENABLED, 1) != 0) {
                if (singleShot && hasCapability(GPS_CAPABILITY_MSA)) {
                    mPositionMode = GPS_POSITION_MODE_MS_ASSISTED;
                } else if (hasCapability(GPS_CAPABILITY_MSB)) {
                    mPositionMode = GPS_POSITION_MODE_MS_BASED;
                }

qua trovate il file completo, con una visione più ampia della programmazione
https://github.com/android/platform_frameworks_base/blob/gingerbread-release/services/java/com/android/server/location/GpsLocationProvider.java#L946

Premesso che queste sono state le indicazioni avute, e le ho eseguite senza particolari problemi.
Ho salvato la modifica ad database con il valore adesso su "0" e ho copiato il file nella sd e infine con rootexplorer nella cartella di origine.
Da qui, purtroppo, il terminale è andato in boot loop, e quindi ho scritto a voi per avere delucidazioni.
L'unica cosa che ho omesso, è stato non modificare i permessi del file editato prima di sostituirlo all'originale, e sempre secondo la fonte di cui prima, è stato questo l'aspetto che ha causato il problema, e mi è stato riferito prima che io stesso potessi pensarci, quindi non avrei motivo di dubitare, ma se sono qui mi restano delle perplessità. Non vorrei andare incontro ad un nuovo bootloop.
Spero di essermi spiegato bene e che qualcuno possa aiutarmi. Sono disponibilissimo a fornire ulteriori indicazioni qualora possano tornare utili.

Cordiali Saluti