Я пытаюсь создать приложение с навигационным ящиком и фрагментом карты.Я пытаюсь получить фрагмент автозаполнения, но при поиске места я получаю только атрибуты name и id .Вот так:
I/PLACE: Place{address=null, attributions=[], id=ChIJVXealLU_xkcRja_At0z9AGY, latLng=null, name=Amsterdam, openingHours=null, phoneNumber=null, photoMetadatas=null, plusCode=null, priceLevel=null, rating=null, types=null, userRatingsTotal=null, viewport=null, websiteUri=null}
Вот мой MapsFragment
public class MapsFragment extends Fragment implements OnMapReadyCallback, LocationListener {
MapView mapView;
GoogleMap nMap;
AutocompleteSupportFragment autocompleteFragment;
PlacesClient placesClient;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.activity_maps, container, false);
...
mapView = (MapView) rootView.findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
autocompleteFragment.onActivityResult(requestCode, resultCode, data);
}
...
@Override
public void onMapReady(GoogleMap googleMap) {
Log.i("DEBUG", "onMapReady");
nMap = googleMap;
Context mContext = getActivity();
if (mContext != null){
Places.initialize(mContext, "*********MY API KEY*********");
}else{
Log.i("PLACE", "ERROR");
}
placesClient = Places.createClient(getActivity());
autocompleteFragment = (AutocompleteSupportFragment)
getChildFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(@NonNull Place place) {
Log.i("PLACE", place.toString());
// Define a Place ID.
//nMap.moveCamera(CameraUpdateFactory.newLatLng(place.getLatLng()));
//nMap.animateCamera(CameraUpdateFactory.newLatLngZoom(place.getLatLng(), 12.0f));
}
@Override
public void onError(@NonNull Status status) {
Log.i("PLACE", status.toString());
}
});
autocompleteFragment.setUserVisibleHint(true);
autocompleteFragment.setHint("Select your city");
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
nMap.setMyLocationEnabled(true);
} else {
// Show rationale and request permission.
Log.d(TAG, "error permission denied");
}
}
Это мой map.xml
...
<fragment
android:id="@+id/place_autocomplete_fragment"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="match_parent"
android:layout_height="56dp" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
...
Я вставил свой API-ключ в код (смотритеФрагмент карты) в googles_maps_api.xml , а также в gradle.properties
PLACES_API_KEY="MY API KEY"
Вот мои зависимости для карт Google
dependencies {
...
implementation 'com.google.android.libraries.places:places:1.0.0'
}
Я выполняю каждые шаги для активации моего API KEY
Я также пытался защитить свой KEY с ограничением Android, но ничего не изменилось
Моя биллинговая системаэто включить.