1

我正在尝试使用 Android Awareness API 来访问天气数据。我的应用程序在显示数据之前崩溃。我相信问题出在 onComplete 方法中,因为 UI 在崩溃之前确实在屏幕上短暂闪烁,并且我能够将调试器运行到之前的行。

控制台显示“FATAL EXCEPTION: GoogleApiHandler”和“java.lang.SecurityException: Invalid API Key for package”我正在使用不受限制的 API 密钥来确保问题不是指纹或包名称。我在清单中使用了我的 API 密钥

<meta-data android:name="com.google.android.awareness.API_KEY" android:value="[key here]"/>

我的应用模块 Gradle 脚本还在依赖项中包含“implementation 'com.google.android.gms:play-services-awareness:11.6.0'”。

还有一个警告说 Awareness.API 已被弃用,但我不知道用什么替换它,因为它在文档中使用。

我的代码如下。

public class MainActivity extends AppCompatActivity {

private static int MY_PERMISSION_LOCATION;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (ContextCompat.checkSelfPermission(
            MainActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION) ==
            PackageManager.PERMISSION_GRANTED) {

        GoogleApiClient client = new GoogleApiClient.Builder(this.getApplicationContext())
                .addApi(Awareness.API)
                .build();
        client.connect();

        SnapshotClient sc = Awareness.getSnapshotClient(this);
        Task<WeatherResponse> weatherResponseTask = sc.getWeather().addOnCompleteListener(new OnCompleteListener<WeatherResponse>() {
            @Override
            public void onComplete(@NonNull Task<WeatherResponse> task) {
                WeatherResponse wr = task.getResult();
                Weather weather = wr.getWeather();
                float temp = weather.getTemperature(Weather.FAHRENHEIT);
                TextView textView = findViewById(R.id.tempText);
                textView.setText("It is currently " + temp + " degrees outside.");
            }
        });
    } else {
        ActivityCompat.requestPermissions(
                MainActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                MY_PERMISSION_LOCATION
        );
        return;
    }
}
}
4

1 回答 1

0

我遇到了同样的问题。我尝试将密钥限制在包中,但仍然遇到“无效密钥”问题。

最后,这篇文章帮助了我。确保将meta_data标签放在application清单中的标签内。

于 2017-12-02T05:35:02.020 回答