Nutzung der Google TimeZone API

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Nutzung der Google TimeZone API

    Hallo,

    ich habe mich gerade durch die Verwendung der TimeZone API bei Google gequält.
    Hier waren für mich viele neue Komponenten, wie AsyncTask, HttpURLConnection, JSONObject und eben die Google TimeZone API enthalten.
    Den Krampf möchte ich jedem Newbe ersparen und deshalb hier mein Code.

    Also Ziel ist es anhand einer Koordinate und der aktuellen Zeit für diese Position z.B. die Zeitzone oder eine aktuelle Zeitverschiebung wegen Sommerzeit zu erfragen.

    Google bietet hierzu die Nutzung der API unter Verwendung eines Schlüssels an, mit dem die Nutzung des Features kontrolliert werden kann. Wird der Schlüssel nicht verwendet, was problemlos möglich ist, dann ist der Nutzer IP basiert auf 2500 Zugriffe beschränkt. Ansonsten ist er App basiert auf 2500 Zugriffe beschränkt.

    Die Dokumentation zur TimeZone API findet sich hier: Google TimeZone API
    Der Schlüssel kann wie bei Google Maps über die API Console als Server Key erzeugt werden: API Console

    Dann hier die Anfrage, z.B. in einem onClick Event:

    Quellcode

    1. double latitude = 50.0; // eure geografische Breite
    2. double longitude = 7.0; // eure geografische Länge
    3. long timestamp = System.currentTimeMillis() / 1000; // die aktuelle Systemzeit in Sekunden
    4. String key = "euer Schlüssel aus der API";
    5. ConnectivityManager connectMngr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    6. NetworkInfo networkInfo = connectMngr.getActiveNetworkInfo();
    7. if (networkInfo != null && networkInfo.isConnected()) {
    8. new TimeZoneAPITask().execute("https://maps.googleapis.com/maps/api/timezone/json?location=" + latitude + "," + longitude + "&timestamp=" + timestamp + "&sensor=false&key" + key);
    9. } else {
    10. Toast.makeText(getApplicationContext(), "Keine Netzwerkverbindung vorhanden.", Toast.LENGTH_SHORT).show();
    11. }
    Alles anzeigen


    Hier die AsyncTask mit der TimeZone-ID als Ergebnis:

    Quellcode

    1. private class TimeZoneAPITask extends AsyncTask<String, Void, String> {
    2. @Override
    3. protected String doInBackground(String... urls) {
    4. try {
    5. return downloadJSON(urls[0]);
    6. } catch (IOException e) {
    7. return "Es können keine Daten empfangen werden. Eventuell ist die URL inkorrekt.";
    8. }
    9. }
    10. @Override
    11. protected void onPostExecute(String result) {
    12. try {
    13. JSONObject jObject = new JSONObject(result);
    14. // hier das gewüschte Resultat!
    15. String aJsonString = jObject.getString("timeZoneId");
    16. Toast.makeText(getApplicationContext(), aJsonString, Toast.LENGTH_SHORT).show();
    17. } catch (JSONException e) {
    18. // TODO Auto-generated method stub
    19. }
    20. }
    21. }
    Alles anzeigen


    Und der eigentliche Download, der für alles Mögliche benutzt werden kann:

    Quellcode

    1. private String downloadJSON(String googleAPIurl) throws IOException {
    2. InputStream jsonInputStream = null;
    3. try {
    4. URL googleAPI = new URL(googleAPIurl);
    5. HttpURLConnection googleConnection = (HttpURLConnection) googleAPI.openConnection();
    6. googleConnection.setReadTimeout(10000); // Millisekunden
    7. googleConnection.setConnectTimeout(15000); // Millisekunden
    8. googleConnection.setRequestMethod("GET");
    9. googleConnection.setDoInput(true);
    10. googleConnection.connect();
    11. jsonInputStream = googleConnection.getInputStream();
    12. BufferedReader streamReader = new BufferedReader(new InputStreamReader(jsonInputStream));
    13. StringBuilder contentAsString = new StringBuilder();
    14. String line = null;
    15. while ((line = streamReader.readLine()) != null) {
    16. contentAsString.append(line + System.getProperty("line.separator"));
    17. }
    18. streamReader.close();
    19. return contentAsString.toString();
    20. } finally {
    21. if (jsonInputStream != null) {
    22. jsonInputStream.close();
    23. }
    24. }
    25. }
    Alles anzeigen


    Ich hoffe das hilft dem Einen oder Anderen!