我在使用Android Google Places API时遇到问题-自动完成功能。我使用了与Android Google Maps API相同的密钥,但它不是开放空间片段。它仅显示“地图”,但是在打开“场所自动完成片段”时会打开并自动关闭,并显示PLACES_API_ACCESS_NOT_CONFIGURED错误。请帮助我解决此问题,并显示处理此问题的权利。这是我的清单XML:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyARQ78yaNEJH12aJLM1Y-112WY12p95ZOEGI"/>
这里是我的开放场所AutocolmpleteFragment代码:
try {
Intent intent =
new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
.build(getActivity());
startActivityForResult(intent, 1);
} catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {
// TODO: Handle the error.
}
还有这里我获得位置响应的代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode ==RESULT_OK) {
Place place = PlaceAutocomplete.getPlace(getActivity(), data);
onPlaceSelected(place,1);
bar.setVisibility(View.GONE);
autoCompleteTextViewPickup.setFocusable(true);
} else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
Status status = PlaceAutocomplete.getStatus(getActivity(), data);
this.onError(status,1);
bar.setVisibility(View.GONE);
autoCompleteTextViewPickup.setFocusable(true);
}
}
答案 0 :(得分:11)
我遇到了同样的问题,但是我已经能够解决它。
问题是Android的Places SDK的Google Play服务版本(在Google Play服务16.0.0中)已于2019年1月29日弃用,并将于2019年7月29日关闭。 而且,如果您在google API控制台下进行检查,则它只有PLACES API,再也没有像PLACES SDK FOR ANDROID这样的东西了。
在应用程序级build.gradle文件的依赖项部分,为新的SDK客户端库添加依赖项,如以下示例所示:
implementation 'com.google.android.libraries.places:places:1.0.0'
然后,将其初始化。
// Add an import statement for the client library.
import com.google.android.libraries.places.api.Places;
...
// Initialize Places.
Places.initialize(getApplicationContext(), apiKey);
// Create a new Places client instance.
PlacesClient placesClient = Places.createClient(this);
程序化自动完成
对自动完成功能进行了以下更改: PlaceAutocomplete重命名为Autocomplete。 PlaceAutocomplete.getPlace重命名为Autocomplete.getPlaceFromIntent。 PlaceAutocomplete.getStatus重命名为Autocomplete.getStatusFromIntent。 将PlaceAutocomplete.RESULT_ERROR重命名为AutocompleteActivity.RESULT_ERROR(自动完成片段的错误处理未更改)。
如果您像我这样使用自动填充小部件,则可以使用它。
<fragment
android:id="@+id/autocomplete_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name=
"com.google.android.libraries.places.widget.AutocompleteSupportFragment"
/>
然后初始化位置
/**
* Initialize Places. For simplicity, the API key is hard-coded. In a production
* environment we recommend using a secure mechanism to manage API keys.
*/
if (!Places.isInitialized()) {
Places.initialize(getApplicationContext(), "YOUR_API_KEY");
}
// Initialize the AutocompleteSupportFragment.
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
Log.i(TAG, "An error occurred: " + status);
}
});
在此处查看更多信息
答案 1 :(得分:1)
似乎正在收到 PLACES_API_ACCESS_NOT_CONFIGURED 警报,因为您不需要进行某些配置:
1)转到google cloud platform
2)在控制台内启用Place API
3)(如果您已经做过-您需要检查2件事:
3-A)(您的API密钥是最新的吗?)(在凭据页面中)
3-B)-在凭据页面中-检查是否有可能阻止您访问API的任何限制。