Google Awareness API から Weather データを更新し、それを Wear コンパニオンに戻す IntentService を取得しました。
API キーを取得し、場所の権限を取得しました。コードが単純なアクティビティから呼び出されると、すべてが機能します。(私のmainActivityでは同じコードで、IntentServiceでは同じアプリの同じパッケージにあります)。
コード:
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 0);
}
mGoogleApiClient = new GoogleApiClient.Builder(this, new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Awareness.SnapshotApi.getWeather(mGoogleApiClient).setResultCallback(new ResultCallback<WeatherResult>() {
@Override
public void onResult(@NonNull WeatherResult weatherResult) {
Log.w("a", "result:" + weatherResult.getStatus().toString());
if (weatherResult.getStatus().isSuccess())
{
Log.w("a", "Weather:" + weatherResult.getWeather().toString());
}
}
});
}
@Override
public void onConnectionSuspended(int i) {
}
}, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}).addApi(Awareness.API).build();
mGoogleApiClient.connect();
SO、このコードはステータスをOKにし、アクティビティにあるときに正しい天気データを渡します。
コードは ACL_ACCESS_DENIED です。位置情報が有効になり、権限を取得しました。
GoogleApiClient.Builder で「this」、「getApplicationContext」、「getBaseContext」、「getApplication」を試してみました。それらのどれも機能しませんでした。
誰かが解決策を得ましたか?
編集: IntentService の関連コードは次のとおりです。しかし、それは私が書いた上のコードに似ています:
public class SenderService extends IntentService {
private GoogleApiClient mGoogleApiClient;
private void handleActionWeather() {
mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext(), new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.w("a", "wsconn"); handleActionWeatherSupport(mGoogleApiClient);
}
@Override
public void onConnectionSuspended(int i) {
}
}, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.w("a", "wsconnfail:" + connectionResult.toString());
}
}).addApi(Wearable.API).addApi(Awareness.API).useDefaultAccount().build();
mGoogleApiClient.connect();
}
private void handleActionWeatherSupport(final GoogleApiClient mGoogleApiClient) {
if (ActivityCompat.checkSelfPermission(getApplication(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Awareness.SnapshotApi.getWeather(mGoogleApiClient).setResultCallback(new ResultCallback<WeatherResult>() {
@Override
public void onResult(@NonNull WeatherResult wr) {
if (!wr.getStatus().isSuccess()) {
Log.w("a", wr.getStatus().toString());
return;
}
Weather we = wr.getWeather();
Log.w("a", "got:" + we.toString());
}
});
}
...
}