Я пытаюсь создать PlacePicker для своего приложения Google Maps и нашел для вас приятное руководство. Руководство не ужасно устарело, поэтому я не ожидал, что он будет использовать любые устаревшие функции. Как оказалось, это так, и я немного смущен тем, как справиться с этой проблемой, но я все еще новичок в Android Development.IntentBuilder не распознан в Android Studio (Google PlacePicker)
Я раньше не использовал IntentBuilder, поэтому я не уверен, что он даже используется правильно. Кажется, что Android просто не знает, что это такое, поскольку предлагаемое решение делает его классом.
Вот соответствующий код:
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.Toast;
import com.firebase.client.ChildEventListener;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ServerValue;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.PlaceBuffer;
import com.google.android.gms.location.places.Places;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.MarkerOptions;
import java.util.HashMap;
import java.util.Map;
public class PlacePicker extends FragmentActivity implements OnMapReadyCallback, ChildEventListener {
private GoogleMap mMap;
private GoogleApiClient mGoogleApiClient;
private LatLngBounds.Builder mBounds = new LatLngBounds.Builder();
private static final int REQUEST_PLACE_PICKER = 1;
public static final int REQUEST_ID_ACCESS_COURSE_FINE_LOCATION = 100;
private static final String FIREBASE_URL = "MYURL";
private static final String FIREBASE_ROOT_NODE = "checkouts";
private Firebase mFirebase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_picker);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
// Set up the API client for Places API
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Places.GEO_DATA_API)
.build();
mGoogleApiClient.connect();
final Button button = (Button) findViewById(R.id.checkout_button);
button.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mMap.setPadding(0, button.getHeight(), 0, 0);
}
}
);
Firebase.setAndroidContext(this);
mFirebase = new Firebase(FIREBASE_URL);
mFirebase.child(FIREBASE_ROOT_NODE).addChildEventListener(this);
}
public void checkOut(View view) {
try {
PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder();
Intent intent = intentBuilder.build(this);
startActivityForResult(intent, REQUEST_PLACE_PICKER);
} catch (GooglePlayServicesRepairableException e) {
GoogleApiAvailability.getInstance().getErrorDialog(this, e.getConnectionStatusCode(),
REQUEST_PLACE_PICKER);
} catch (GooglePlayServicesNotAvailableException e) {
Toast.makeText(this, "Please install Google Play Services!", Toast.LENGTH_LONG).show();
}
}
private void addPointToViewPort(LatLng newPoint) {
mBounds.include(newPoint);
mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(mBounds.build(),
findViewById(R.id.checkout_button).getHeight()));
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PLACE_PICKER) {
if (resultCode == Activity.RESULT_OK) {
Place place = PlacePicker.getPlace(data, this);
Map<String, Object> checkoutData = new HashMap<>();
checkoutData.put("time", ServerValue.TIMESTAMP);
mFirebase.child(FIREBASE_ROOT_NODE).child(place.getId()).setValue(checkoutData);
} else if (resultCode == PlacePicker.RESULT_ERROR) {
Toast.makeText(this, "Places API failure! Check the API is enabled for your key",
Toast.LENGTH_LONG).show();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String placeId = dataSnapshot.getKey();
if (placeId != null) {
Places.GeoDataApi
.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
LatLng location = places.get(0).getLatLng();
addPointToViewPort(location);
mMap.addMarker(new MarkerOptions().position(location));
places.release();
}
}
);
}
}
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (Build.VERSION.SDK_INT >= 23) {
int accessCoarsePermission
= ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION);
int accessFinePermission
= ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION);
if (accessCoarsePermission != PackageManager.PERMISSION_GRANTED
|| accessFinePermission != PackageManager.PERMISSION_GRANTED) {
// The Permissions to ask user.
String[] permissions = new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_FINE_LOCATION};
// Show a dialog asking the user to allow the above permissions.
ActivityCompat.requestPermissions(this, permissions,
REQUEST_ID_ACCESS_COURSE_FINE_LOCATION);
return;
}
}
mMap.setMyLocationEnabled(true);
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
addPointToViewPort(ll);
// we only want to grab the location once, to allow the user to pan and zoom freely.
mMap.setOnMyLocationChangeListener(null);
}
});
// Add a marker in Sydney and move the camera
}
Также getPlace и RESULT_ERROR красный как хорошо, и непризнанный Android Studio здесь.
Я не уверен, могу ли я опубликовать ссылку на руководство, о котором идет речь, поэтому я буду публиковать сообщения только в том случае, если вас попросят.
Я все еще довольно новичок в Android Studio, поэтому вся помощь очень ценится!
вы добавили импорт? 'import com.google.android.gms.location.places.ui.PlacePicker;' – antonio
@antonio, этот конкретный импорт также не recoqnized, но я добавил все нормальные места импорта. Я отреагировал свой ответ на импорт. –
В зависимости от используемой вами версии сервисов Google Play вам может потребоваться внести изменения в ваше приложение для [новой модели разрешений] (https://developer.android.com/training/permissions/index.html) , Как указано в [Разрешения на выбор места размещения] (https://developers.google.com/places/android-api/placepicker#permissions) при условии, что вы используете версию 8.1 или более позднюю версию служб Google Play, вы можете настроить свою приложение для установки на Android 6.0 Marshmallow SDK и использование новой модели разрешений. – Teyam