Facebook Friends Mapper: Android New!
private void setupFacebookLogin() { loginButton.setOnClickListener(v -> performFacebookLogin()); }
private void fetchFriendsAndLocations() { progressBar.setVisibility(View.VISIBLE); statusText.setText("Loading friends..."); GraphRequest request = GraphRequest.newMeRequest( AccessToken.getCurrentAccessToken(), (object, response) -> { if (object != null) { try { JSONObject friends = object.getJSONObject("friends"); JSONArray data = friends.getJSONArray("data"); for (int i = 0; i < data.length(); i++) { JSONObject friend = data.getJSONObject(i); String name = friend.getString("name"); String id = friend.getString("id"); // Fetch friend's location info fetchFriendLocation(id, name); } statusText.setText("Found " + data.length() + " friends"); progressBar.setVisibility(View.GONE); } catch (Exception e) { e.printStackTrace(); statusText.setText("Error parsing friends data"); } } } ); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,friends.limit(100){id,name,location}"); request.setParameters(parameters); request.executeAsync(); }
private void performFacebookLogin() { LoginManager.getInstance().logInWithReadPermissions( this, Arrays.asList("public_profile", "user_friends") ); LoginManager.getInstance().registerCallback( new CallbackManager.Factory().create(), new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { fetchFriendsAndLocations(); } @Override public void onCancel() { Toast.makeText(FacebookFriendsMapperActivity.this, "Login cancelled", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException error) { Toast.makeText(FacebookFriendsMapperActivity.this, "Login error: " + error.getMessage(), Toast.LENGTH_SHORT).show(); } } ); } facebook friends mapper android
private static final int LOCATION_PERMISSION_REQUEST = 100; private GoogleMap googleMap; private ProgressBar progressBar; private TextView statusText; private EditText searchFilter; private Button loginButton, filterButton;
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="8dp"> private void setupFacebookLogin() { loginButton
private void showFriendDetailsDialog(FriendLocation friend) { new AlertDialog.Builder(this) .setTitle(friend.name) .setMessage("Location: " + friend.location + "\n" + "Coordinates: " + friend.latitude + ", " + friend.longitude) .setPositiveButton("Close", null) .setNeutralButton("Show on Map", (dialog, which) -> { LatLng position = new LatLng(friend.latitude, friend.longitude); googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position, 12)); }) .show(); }
private void addMarkerToMap(FriendLocation friend) { if (googleMap == null) return; LatLng position = new LatLng(friend.latitude, friend.longitude); MarkerOptions markerOptions = new MarkerOptions() .position(position) .title(friend.name) .snippet(friend.location) .icon(BitmapDescriptorFactory.defaultMarker( BitmapDescriptorFactory.HUE_AZURE )); Marker marker = googleMap.addMarker(markerOptions); friendMarkers.put(friend.name, friend); // Center map on first friend if (friendMarkers.size() == 1) { googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 5)); } } JSONArray data = friends.getJSONArray("data")
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_GOOGLE_MAPS_API_KEY" />