1

Ich habe eine Aktivität mit einer Taste, die ich verwenden möchte, um mir einige Wetterinformationen innerhalb der gleichen Aktivität (die ich mit TextView unter der Schaltfläche anzeigen ...). Ich habe so etwas wie dies:Wie bekomme ich Wetterinformationen mit Google Awareness API?

______________________ 
| give me weather info | (button with onClick="addMeteoInfo") 
"""""""""""""""""""""" 
temperature:    (TextView) 
humidity:      (TextView) 

Ich versuche, das Google-Bewusstsein Api zu verwenden, um die Wetter-Infos über meinen aktuellen Standort (https://developers.google.com/awareness/android-api/get-started) zu bekommen, aber ich habe einige Probleme ... die Schritte, die ich habe gefolgt sind:

1) Fügen Sie in meinem Manifest-Datei:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

<meta-data android:name="com.google.android.awareness.API_KEY" android:value="@string/google_maps_key" /> 

<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key" /> 

wo "@ String/google_maps_key" ist die Zeichenfolge, die ich durch die die Google Developers Console erhalten haben und dann zu meiner strings.xml Datei-Ressource.

2) In meiner build.gradle (Modul: app) file:

compile 'com.google.android.gms:play-services-awareness:9.6.1'

3) in meiner Tätigkeit habe ich:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_nuova_battuta); 
    ... 
    android.content.Context context; 
    GoogleApiClient client = new GoogleApiClient.Builder(context) 
     .addApi(Awareness.API) 
     .build(); 
    client.connect(); 
} 

// onClick method for button "give me weather info" 
public void addMeteoInfo(View view){ 
    richiediInfoMeteo(); 
} 

public void richiediInfoMeteo() { 
    if(!checkLocationPermission()) { 
     return; 
    } 

    Awareness.SnapshotApi.getWeather(mGoogleApiClient) 
      .setResultCallback(new ResultCallback<WeatherResult>() { 
       @Override 
       public void onResult(@NonNull WeatherResult weatherResult) { 

        if (!weatherResult.getStatus().isSuccess()) {  <----HERE 
         Log.e(TAG, "Could not get weather."); 

         return; 
        } 

        Weather weather = weatherResult.getWeather(); 
        Log.e("Tuts+", "Temp: " + weather.getTemperature(Weather.FAHRENHEIT)); 
        Log.e("Tuts+", "Feels like: " + weather.getFeelsLikeTemperature(Weather.FAHRENHEIT)); 
        Log.e("Tuts+", "Dew point: " + weather.getDewPoint(Weather.FAHRENHEIT)); 
        Log.e("Tuts+", "Humidity: " + weather.getHumidity()); 

        //converto i valori interi ottenuti dall'API Google play services, in stringhe 
        String temperaturaStr = Double.toString(weather.getTemperature(Weather.CELSIUS)); 
        String temperaturaPercepitaStr = Double.toString(weather.getFeelsLikeTemperature(Weather.CELSIUS)); 
        String puntoRugiadaStr = Double.toString(weather.getDewPoint(Weather.CELSIUS)); 
        String umiditaStr = Double.toString(weather.getHumidity()); 

        //prelevo id visualizzatori di tali valori nel layout 
        mostraTemperatura = (TextView) findViewById(R.id.temperatura); 
        mostraTemperaturaPercepita = (TextView) findViewById(R.id.temperaturaPercepita); 
        mostraPuntoRugiada = (TextView) findViewById(R.id.puntoDiRugiada); 
        mostraUmidita = (TextView) findViewById(R.id.umidita); 

        // setto i visualizzatori ai valori convertiti in stringhe 
        mostraTemperatura.setText(temperaturaStr); 
        mostraTemperaturaPercepita.setText(temperaturaPercepitaStr); 
        mostraPuntoRugiada.setText(puntoRugiadaStr); 
        mostraUmidita.setText(umiditaStr); 

       } 
      }); 
} 


private boolean checkLocationPermission() { 
    //se permessi non disponibili allora li richiedo tramite finestra dialog 
    if(!hasLocationPermission()) { 
     Log.e("Tuts+", "Does not have location permission granted"); 
     requestLocationPermission(); 
     return false; 
    } 
    //altrimenti se possiede già permessi 
    return true; 
} 

private boolean hasLocationPermission() { 
    return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED; 
} 

private void requestLocationPermission() { 
    ActivityCompat.requestPermissions(
      NuovaBattutaActivity.this, 
      new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, 
      RICHIESTA_PERMESSO_INFO_METEO); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case RICHIESTA_PERMESSO_INFO_METEO: 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //granted 
       richiediInfoMeteo(); 
      } else { 
       Log.e("Tuts+", "Location permission denied."); 
      } 
     default: 
      break; 
    } 
} 

Also, wenn ich meine app laufen in die AVD Ich habe immer in der Konsole die Nachricht erhalten: Konnte das Wetter nicht bekommen. dh die Methode weatherResult.getStatus(). isSuccess() (in der Methode richiediInfoMeteo()) gibt immer false zurück. Wo liege ich falsch? Wie kann ich damit umgehen?

Vielen Dank im Voraus.

+0

Irgendwelche Vorschläge? – Fobi

Antwort

1

Verwenden Sie die weatherResult.getStatus().getStatusCode() Funktion. Dies gibt einen möglichen Fehlercode zurück, der looked up here sein kann.

Ein mögliches Problem ist, dass die Standortdienste auf Ihrem Gerät nicht aktiviert sind. Aktivieren Sie diese und versuchen Sie es erneut. Dadurch könnte Ihr Problem gelöst werden. Ich hatte ein ähnliches Problem (mit Fehlercode 7503).

Verwandte Themen