3

在我的onCreate我调用以下函数来检测天气。

private void detectWeather() {
        if( !checkLocationPermission() ) {
            return;
        }

        Awareness.getSnapshotClient(this).getWeather()
                .addOnSuccessListener(new OnSuccessListener<WeatherResponse>() {
                    @Override
                    public void onSuccess(WeatherResponse weatherResponse) {
                        Weather weather = weatherResponse.getWeather();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e("Testing", "Could not get weather: " + e);
                    }
                });
    }

在我的清单文件中,我添加了以下元数据和权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />

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

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

在我的 Gradle 文件中,我添加了以下依赖项。

compile 'com.google.android.gms:play-services:+'
compile 'com.google.android.gms:play-services-gcm:+'
compile 'com.google.android.gms:play-services-location:+'
compile 'com.google.android.gms:play-services-awareness:+'

该应用程序启动正常并进入感知 API,但它在日志中引发以下错误:com.google.android.gms.common.api.ApiException: 15. 我在文档和 Google/Stackoverflow 上都找不到这个错误的解释。我错过了一些明显的东西吗?

4

1 回答 1

0

对于未来的读者,Google Awareness API 现在已弃用天气和地点。

另一种选择是NumberEight SDK,它可以做的比 Awareness 更多(尽管在撰写本文时还没有可用的区域划分)。

它在 iOS 和 Android 上执行各种上下文识别任务,包括:

  • 实时身体活动检测
  • 当前地点类别
  • 运动检测
  • 可达性
  • 当地天气

它还可以通过在线门户记录用户上下文以进行报告和分析。

要在 Java 中快速接收天气更新,您可以编写:

NumberEight ne = new NumberEight();

ne.onWeatherUpdated(
    new NumberEight.SubscriptionCallback<NEWeather>() {
        @Override
        public void onUpdated(@NonNull Glimpse<NEWeather> glimpse) {
            Log.d("CurrentWeather", glimpse.getMostProbable().toString());
        }
    });

以下是一些iOSAndroid示例项目。

披露:我是开发人员之一。

于 2020-04-27T16:06:20.127 回答