私は、同じアクティビティの中に気象情報をいくつか与えるために使用したいボタンが1つあります(ボタンの下にテキストビューを表示しています...)。私はこのようなものがあります:私は私の現在の場所(https://developers.google.com/awareness/android-api/get-started)に関する気象情報を取得するために、Googleの意識APIを使用しようとしているGoogle Awareness APIで気象情報を取得するにはどうすればよいですか?
______________________
| give me weather info | (button with onClick="addMeteoInfo")
""""""""""""""""""""""
temperature: (TextView)
humidity: (TextView)
を、私はいくつかのトラブルを持っている...私が持っている 手順
1)私のマニフェストファイルに追加します:
「@文字列/ google_maps_keyは」私はGoogleのデベロッパーコンソールを介して取得し、その後、私のstrings.xmlに追加した文字列である<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" />
ある続きますファイルリソース。アプリ)ファイル:
2)私のbuild.gradleに(モジュールの追加、私の活動に
compile 'com.google.android.gms:play-services-awareness:9.6.1'
3)私が持っている:だから
@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;
}
}
私は私のアプリを実行しますAVD私はいつもメッセージをコンソールに入れます: 天候を得ることができませんでした。すなわち、weatherResult.getStatus().isSuccess()(richiediInfoMeteo()メソッド内)メソッドは常にfalseを返します。 どこが間違っていますか?これをどうすれば処理できますか?
ありがとうございます。
提案がありますか? – Fobi