Reputation: 137
I am building an app which uses google map API to to show user's current location. I placed a PlcaeAutoComplete fragment for searching particular loaction by following this link https://developers.google.com/places/android-api/autocomplete#option_1_embed_a_placeautocompletefragment_or_a_supportplaceautocompletefragment
Now problem is that when i start typing in PlaceAutoComplete it suggests nothing and cancels my searching automatically. Here is my main activity
public class MapsActivity extends FragmentActivity implements OnlocReceive,OnMapReadyCallback, GoogleMap.OnMapClickListener,/* LocationListener,/ GoogleMap.OnMarkerClickListener/, GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks*/ {
private GoogleMap mMap;
Marker m;
public static final String TAG = MapsActivity.class.getSimpleName();
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
Location location;
int PLACE_AUTOCOMPLETE_REQUEST_CODE = 1;
private final int MY_PERMISSIONS_REQUEST_CODE = 1;
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
public GoogleApiClient getmGoogleApiClient()
{
return mGoogleApiClient;
}
boolean bound = false;
LocationUpdateService locationService;
public ServiceConnection serviceConnection;
Intent serviceIntent;
PlaceAutocompleteFragment autocompleteFragment;
AutocompleteFilter typeFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newlayout);
// 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);
autocompleteFragment = (PlaceAutocompleteFragment)
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
typeFilter = new AutocompleteFilter.Builder().setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS).build();
autocompleteFragment.setFilter(typeFilter);
autocompleteFragment.setBoundsBias(new LatLngBounds(
new LatLng(-33.880490, 151.184363),
new LatLng(-33.858754, 151.229596)));
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
// TODO: Get info about the selected place.
Log.i(TAG, "Place: ------------------------>" + place.getName());
Toast.makeText(MapsActivity.this, "place:"+place.getName(), Toast.LENGTH_SHORT).show();
PendingResult<AutocompletePredictionBuffer> result =
Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient,place.getName().toString(),
null, typeFilter);
}
@Override
public void onError(Status status) {
}
});
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mWifi.isConnected()) {
builALertMessageNoWifi();
}
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
locationService = ((LocationUpdateService.localBinder)service).getservice();
locationService.passClassrefrence(MapsActivity.this);
Toast.makeText(MapsActivity.this, "bound", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
bound = false;
Toast.makeText(MapsActivity.this, "not_bound", Toast.LENGTH_SHORT).show();
}
};
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Toast.makeText(MapsActivity.this, "req permission", Toast.LENGTH_SHORT).show();
requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_CODE);
}
}
else
{
// location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
serviceIntent = new Intent(MapsActivity.this,LocationUpdateService.class);
startService(serviceIntent);
bound= bindService(serviceIntent,serviceConnection,BIND_AUTO_CREATE);
}
public void onMapReady(GoogleMap googleMap) { mMap = googleMap;
Toast.makeText(MapsActivity.this, "onMapReady", Toast.LENGTH_SHORT).show();
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
}
private void handleNewLocation(Location location) {
Log.i(TAG, "in handle new location---------------------->.");
Log.d(TAG, location.toString());
double currentLatitude = location.getLatitude();
double currentLongitude = location.getLongitude();
Toast.makeText(MapsActivity.this, "lat:"+currentLatitude+" lang:"+currentLongitude, Toast.LENGTH_SHORT).show();
LatLng latLng = new LatLng(currentLatitude, currentLongitude);
//mMap.addMarker(new MarkerOptions().position(new LatLng(currentLatitude, currentLongitude)).title("Current Location"));
MarkerOptions options = new MarkerOptions()
.position(latLng)
.title("I am here!");
if(m!=null)
m.remove();
m = mMap.addMarker(options);
// mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17));
}
@Override
public void onreceive(Location l) {
handleNewLocation(l);
if(serviceIntent!=null && bound==true ) {
locationService.stopupdates();
stopService(serviceIntent);
Toast.makeText(MapsActivity.this, "stop service", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_PERMISSIONS_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED)
{
Toast.makeText(MapsActivity.this, " granted " + grantResults[0] + "granted2" + grantResults[1], Toast.LENGTH_SHORT).show();
try {
// location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
Toast.makeText(MapsActivity.this, "in recieve request new location", Toast.LENGTH_SHORT).show();
serviceIntent = new Intent(MapsActivity.this,LocationUpdateService.class);
startService(serviceIntent);
bound = bindService(serviceIntent,serviceConnection,BIND_AUTO_CREATE);
} catch (SecurityException e) {
}
}
}
}
@Override
protected void onResume() {
Toast.makeText(MapsActivity.this, "on Resume", Toast.LENGTH_SHORT).show();
// stopService(serviceIntent);
super.onResume();
}
@Override
protected void onDestroy() {
if(serviceIntent!=null && bound ==true ) {
locationService.stopupdates();
stopService(serviceIntent);
// unbindService(serviceConnection);
}
super.onDestroy();
}
private void buildAlertMessageNoGps() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
}
private void builALertMessageNoWifi()
{
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your WIFI seeems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
}
}
Upvotes: 1
Views: 495
Reputation: 7741
Usually Google PlaceAutoComplete did not work because of wrong/incomplete API enabled in the Developer Console. So make sure that you enable the correct API. You should enable both the Google Place API for Android and Google Place API Web Services. Also, make sure that the API key you are using with this is browser key. For more information about Place Autocomplete, check this tutorial.
Upvotes: 1