Я пытаюсь использовать Android Awareness API для доступа к данным о погоде. Мое приложение вылетает до отображения данных. Я считаю, что проблема заключается в методе onComplete, потому что пользовательский интерфейс ненадолго мигает на экране перед сбоем, и я могу запустить отладчик до строки раньше.
В консоли написано «FATAL EXCEPTION: GoogleApiHandler» и «java.lang.SecurityException: неверный ключ API для пакета». Я использую неограниченный ключ API, чтобы убедиться, что проблема не в отпечатке пальца или имени пакета. Я включил свой ключ API в манифест, используя
<meta-data
android:name="com.google.android.awareness.API_KEY"
android:value="[key here]"/>
Сценарий Gradle моего модуля приложения также включает в себя «реализация» 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;
}
}
}