1

私は、同じアクティビティの中に気象情報をいくつか与えるために使用したいボタンが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を返します。 どこが間違っていますか?これをどうすれば処理できますか?

ありがとうございます。

+0

提案がありますか? – Fobi

答えて

1

weatherResult.getStatus().getStatusCode()機能を使用してみてください。これにより、エラーコードを返す可能性があります。

可能性のある問題は、お使いの端末で位置情報サービスが有効になっていないことです。これらを有効にしてもう一度お試しください。私にも同様の問題があった(エラーコード7503)。

関連する問題