Доступ к Google Awareness API для Android приводит к сбою приложения

Я пытаюсь использовать 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;
    }
}
}

person user1959417    schedule 23.11.2017    source источник


Ответы (1)


Я столкнулся с той же проблемой. Я попытался ограничить ключ пакетом, но все еще сталкивался с проблемой «неверный ключ».

В конце концов, мне помог этот сообщение. Убедитесь, что тег meta_data помещен внутри тега application в манифесте.

person Stigasaur    schedule 02.12.2017
comment
Спасибо за подсказку о теге метаданных. У меня он был не в том месте, но после его перемещения у меня та же ошибка. Моя проблема не такая, как вопрос, который вы связали, потому что их приложение падает в построителе, но мое выходит на несколько строк дальше. - person user1959417; 07.12.2017