Frage

Ich fange meine Zehen in Location zu tauchen. Ich habe einen Service geschaffen, die GPS-Position verfolgt (Intervall ist mehr als 60000ms) und aktualisiere meine Anwendung mit Benutzern Lage, so dass sie Sachen in der Nähe finden können.

Wie ich es verstehe, die Benutzer in ihre Präferenzen und deaktivieren GPS für eine bestimmte Anwendung gehen.

Ich würde im Wesentlichen wie meine Benutzer zwei Modi bieten. 1) GPS. 2) Wenn GPS nicht ziehen kann, Gerät nicht über einen GPS-Chip oder GPS ist für meine App ausgeschaltet ist, würde Ich mag, damit sie in ihrer Postleitzahl eingeben (oder vielleicht wechsle Zelle Turm-Lookup).

Der fett gedruckten Text ist, was ich bin interessiert an. Wie kann ich feststellen, ob das Gerät GPS nicht hat? Wie kann ich feststellen, ob der Benutzer deaktiviert GPS für meine Anwendung hat?

Side Frage: Mein Service wird von meiner zweiten Aktivität ins Leben gerufen. Ich nenne Stopservice in dem onDestroy Verfahren dieser Aktivität. Wenn ich meine erste Aktivität sichern und die zweite Aktivität zerstört wird, merke ich immer noch das GPS-Symbol auf meinem Handy läuft. Stoppt den Dienst ausreichend? Oder muss ich die Locationmanager im onDestroy des Dienstes stoppen?

War es hilfreich?

Lösung

Wenn ein Benutzer nicht über GPS aktiviert, kann er noch Wifi / Netzwerk hat als Standortquelle in seiner Telefoneinstellung aktiviert, deshalb können Sie diese Daten auch verwenden.

Sie können immer die letzte bekannte Position des GPS oder Netzwerk über bekommen

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

und / oder

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)

Es hält die letzte bekannte Position durch das Gerät, die von Ihrer Anwendung oder einer anderen Anwendung, dem verwendeten GPS hat sein vor.

Sie können tatsächlich zwei Standort-Manager mit den verschiedenen Anbietern verwenden: eines mit GPS_PROVIDER und zum anderen mit NETWORK_PROVIDER. GPS ist genauer, aber in der Regel funktioniert nur im Freien unter freiem Himmel, warum NETWORK_PROVIDER arbeitet drinnen ist aber weniger genau. Auch GPS könnte eine Weile dauern, bis sie ein erstes Update wird nach initialisiert (manchmal heißt eine Minute oder mehr), während das Netzwerk erhalten ist die Lage fast sofort.

Sie diesen Beitrag lesen sollen, ist es sehr detailliert und hat Beispielcode: Was ist die einfachste und robusteste Art und Weise des Benutzers aktuellen Standort auf Android zu bekommen?

In Bezug auf die zweite Frage: bevor Sie den Service, sollten Sie auch austragen der Lage Hörer zu stoppen. Sie können diese onPause oder onDestroy tun.

locationManager.removeUpdates(baseLocationListener)

oder

locationManager.removeAllUpdates()

Ich denke, in Ihrem Fall mit getLastKnowLocation () ist in Ordnung.

Wenn Sie jedoch explizit über den GPS-Status wissen wollen, können Sie einen GPS-Status Listener implementieren und dann unter so etwas wie verwenden, die Ihnen sagt, wenn das GPS jede Satelliten-Fix hat oder nicht - aber wie gesagt, ich don‘ t denken, daß dies wirklich notwendig ist.

final class GpsStatusListener implements GpsStatus.Listener {
    public void onGpsStatusChanged(int i) {

        if (i==GpsStatus.GPS_EVENT_FIRST_FIX) {
            Log.d(AskTingTing.APP, "gpsx.fixed.");
            for (GpsSatellite sat:locationManager.getGpsStatus(null).getSatellites()) {
                Log.d(AskTingTing.APP, "gpsx.GpsStatus.Sat.fixed: " + sat.usedInFix());
            }
        }
    }
}

Blick auf dem Link oben für ein gutes Codebeispiel.

Andere Tipps

Wenn das Gerät nicht GPS hat oder es ist nicht vorhanden die zurückgegebenen Werte (lat, lng) von dem Location Manager gleich sein werden, so nur um null die Werte überprüfen und dann den Benutzer auffordern, ihre Position zu gelangen. Ich würde Reverse-Geocoding empfehlen einen lat / lng Wert für ihren Standort in diesem Fall zu erhalten.

Seite Frage. Ich bin nicht so sicher auf Ich nehme an, Sie müssen sie zu zerstören, wenn es noch läuft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top