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.
Irgendwelche Vorschläge? – Fobi