• Tutorials
  • Tips & Tricks
  • Applications
  • News

Android Trainee

  • Tutorials
  • Tips & Tricks
  • Applications
  • News
Home  /  Tutorials  /  Adding and removing multiple proximity alerts in Google Maps Android API V2
21 November 2014

Adding and removing multiple proximity alerts in Google Maps Android API V2

Written by admin@androidtrainee
Tutorials android, Android App, androidmapv2, google place api, location, map, mapv2, mapv2 api, touched location Leave a Comment

Step 1 :- Create New Android Project.

Step 2 :- Add Google-play-services_lib to your project.

Step 3 :- Open AndroidManifest.xml file.

<!--?xml version="1.0" encoding="utf-8"?-->
package="com.mapv2.demo"
android:versionCode="1"
android:versionName="1.0" &gt;

&lt;uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /&gt;

&lt;permission
android:name="com.mapv2.demo.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/&gt;

&nbsp;

&nbsp;

&lt;uses-feature
android:glEsVersion="0x00020000"
android:required="true"/&gt;

&lt;application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" &gt;
&lt;activity
android:name="com.mapv2.demo.MainActivity"
android:label="@string/app_name" &gt;
&nbsp;

&lt;activity
android:name=".ProximityActivity"
android:label="@string/app_name" &gt;



&lt;activity
android:name=".NotificationView"
android:label="@string/app_name" &gt;

&nbsp;

&nbsp;

&lt;meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyCmX7SLVHXxU9pSqb2QbAOvdnjAGUulOrk"/&gt;

&nbsp;

Step 4 :- Open activity_main.xml.

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>

1.) notification.xml

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_notification"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

Step 5 :- Open MainActivity.java


package com.mapv2.demo;

import android.app.Dialog;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity {

GoogleMap googleMap;
LocationManager locationManager;
PendingIntent pendingIntent;
SharedPreferences sharedPreferences;
int locationCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Getting Google Play availability status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

// Showing status
if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();

}else { // Google Play Services are available

// Getting reference to the SupportMapFragment of activity_main.xml
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

// Getting GoogleMap object from the fragment
googleMap = fm.getMap();

// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);

// Getting LocationManager object from System Service LOCATION_SERVICE
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

// Opening the sharedPreferences object
sharedPreferences = getSharedPreferences("location", 0);

// Getting number of locations already stored
locationCount = sharedPreferences.getInt("locationCount", 0);

// Getting stored zoom level if exists else return 0
String zoom = sharedPreferences.getString("zoom", "0");

// If locations are already saved
if(locationCount!=0){

String lat = "";
String lng = "";

// Iterating through all the locations stored
for(int i=0;i<locationCount;i++){

// Getting the latitude of the i-th location
lat = sharedPreferences.getString("lat"+i,"0");

// Getting the longitude of the i-th location
lng = sharedPreferences.getString("lng"+i,"0");

// Drawing marker on the map
drawMarker(new LatLng(Double.parseDouble(lat), Double.parseDouble(lng)));

// Drawing circle on the map
drawCircle(new LatLng(Double.parseDouble(lat), Double.parseDouble(lng)));
}

// Moving CameraPosition to last clicked position
googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(Double.parseDouble(lat), Double.parseDouble(lng))));

// Setting the zoom level in the map on last position is clicked
googleMap.animateCamera(CameraUpdateFactory.zoomTo(Float.parseFloat(zoom)));
}

googleMap.setOnMapClickListener(new OnMapClickListener() {

@Override
public void onMapClick(LatLng point) {

// Incrementing location count
locationCount++;

// Drawing marker on the map
drawMarker(point);

// Drawing circle on the map
drawCircle(point);

// This intent will call the activity ProximityActivity
Intent proximityIntent = new Intent("in.wptrafficanalyzer.activity.proximity");

// Passing latitude to the PendingActivity
proximityIntent.putExtra("lat",point.latitude);

// Passing longitude to the PendingActivity
proximityIntent.putExtra("lng", point.longitude);

// Creating a pending intent which will be invoked by LocationManager when the specified region is
// entered or exited
pendingIntent = PendingIntent.getActivity(getBaseContext(), 0, proximityIntent,Intent.FLAG_ACTIVITY_NEW_TASK);

// Setting proximity alert
// The pending intent will be invoked when the device enters or exits the region 20 meters
// away from the marked point
// The -1 indicates that, the monitor will not be expired
locationManager.addProximityAlert(point.latitude, point.longitude, 20, -1, pendingIntent);

/** Opening the editor object to write data to sharedPreferences */
SharedPreferences.Editor editor = sharedPreferences.edit();

// Storing the latitude for the i-th location
editor.putString("lat"+ Integer.toString((locationCount-1)), Double.toString(point.latitude));

// Storing the longitude for the i-th location
editor.putString("lng"+ Integer.toString((locationCount-1)), Double.toString(point.longitude));

// Storing the count of locations or marker count
editor.putInt("locationCount", locationCount);

/** Storing the zoom level to the shared preferences */
editor.putString("zoom", Float.toString(googleMap.getCameraPosition().zoom));

/** Saving the values stored in the shared preferences */
editor.commit();

Toast.makeText(getBaseContext(), "Proximity Alert is added", Toast.LENGTH_SHORT).show();

}
});

googleMap.setOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng point) {
Intent proximityIntent = new Intent("in.wptrafficanalyzer.activity.proximity");

pendingIntent = PendingIntent.getActivity(getBaseContext(), 0, proximityIntent,Intent.FLAG_ACTIVITY_NEW_TASK);

// Removing the proximity alert
locationManager.removeProximityAlert(pendingIntent);

// Removing the marker and circle from the Google Map
googleMap.clear();

// Opening the editor object to delete data from sharedPreferences
SharedPreferences.Editor editor = sharedPreferences.edit();

// Clearing the editor
editor.clear();

// Committing the changes
editor.commit();

Toast.makeText(getBaseContext(), "Proximity Alert is removed", Toast.LENGTH_LONG).show();
}
});
}
}

private void drawCircle(LatLng point){

// Instantiating CircleOptions to draw a circle around the marker
CircleOptions circleOptions = new CircleOptions();

// Specifying the center of the circle
circleOptions.center(point);

// Radius of the circle
circleOptions.radius(20);

// Border color of the circle
circleOptions.strokeColor(Color.BLACK);

// Fill color of the circle
circleOptions.fillColor(0x30ff0000);

// Border width of the circle
circleOptions.strokeWidth(2);

// Adding the circle to the GoogleMap
googleMap.addCircle(circleOptions);

}

private void drawMarker(LatLng point){
// Creating an instance of MarkerOptions
MarkerOptions markerOptions = new MarkerOptions();

// Setting latitude and longitude for the marker
markerOptions.position(point);

// Adding InfoWindow title
markerOptions.title("Location Coordinates");

// Adding InfoWindow contents
markerOptions.snippet(Double.toString(point.latitude) + "," + Double.toString(point.longitude));

// Adding marker on the Google Map
googleMap.addMarker(markerOptions);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

1.) NotificationView.java


package com.mapv2.demo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class NotificationView extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.notification);

TextView tv = (TextView) findViewById(R.id.tv_notification);
Bundle data = getIntent().getExtras();
tv.setText(data.getString("content"));
}
}

2.) ProximityActivity.java


package com.mapv2.demo;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;

public class ProximityActivity extends Activity {

String notificationTitle;
String notificationContent;
String tickerMessage;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

boolean proximity_entering = getIntent().getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING, true);

double lat = getIntent().getDoubleExtra("lat", 0);

double lng = getIntent().getDoubleExtra("lng", 0);

String strLocation = Double.toString(lat)+","+Double.toString(lng);

if(proximity_entering){
Toast.makeText(getBaseContext(),"Entering the region" ,Toast.LENGTH_LONG).show();
notificationTitle = "Proximity - Entry";
notificationContent = "Entered the region:" + strLocation;
tickerMessage = "Entered the region:" + strLocation;
}else{
Toast.makeText(getBaseContext(),"Exiting the region" ,Toast.LENGTH_LONG).show();
notificationTitle = "Proximity - Exit";
notificationContent = "Exited the region:" + strLocation;
tickerMessage = "Exited the region:" + strLocation;
}

Intent notificationIntent = new Intent(getApplicationContext(),NotificationView.class);

/** Adding content to the notificationIntent, which will be displayed on
* viewing the notification
*/
notificationIntent.putExtra("content", notificationContent );

/** This is needed to make this intent different from its previous intents */
notificationIntent.setData(Uri.parse("tel:/"+ (int)System.currentTimeMillis()));

/** Creating different tasks for each notification. See the flag Intent.FLAG_ACTIVITY_NEW_TASK */
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);

/** Getting the System service NotificationManager */
NotificationManager nManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

/** Configuring notification builder to create a notification */
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
.setWhen(System.currentTimeMillis())
.setContentText(notificationContent)
.setContentTitle(notificationTitle)
.setSmallIcon(R.drawable.ic_launcher)
.setAutoCancel(true)
.setTicker(tickerMessage)
.setContentIntent(pendingIntent)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

/** Creating a notification from the notification builder */
Notification notification = notificationBuilder.build();

/** Sending the notification to system.
* The first argument ensures that each notification is having a unique id
* If two notifications share same notification id, then the last notification replaces the first notification
* */
nManager.notify((int)System.currentTimeMillis(), notification);

/** Finishes the execution of this activity */
finish();

}
}

Step 6 :- Run Code.

admin@androidtrainee

 Previous Article Retain markers on screen rotation in Google Maps Android API V2 using Parcelable LatLng points
Next Article   Updating InfoWindow contents with coordinates when dragging marker in Google Maps Android API V2

Related Posts

  • Android New Quick Action Animation.

    July 15, 2015
  • Android satellite menu Animation.

    July 15, 2015
  • Android Staggered Grid & List View.

    July 14, 2015

Leave a Reply

Cancel reply

Tags

admob Advertising Networks AerServ Airpush android android ads android Advertising Networks Android App android chart animation Android GridView android L android lollipop androidmapv2 AppBrain AppFlood Appia AppKey Appnext AppOptim Appwiz chart chartview Epom Market google place api GridView Image Loader InMobi LeadBolt location map mapv2 mapv2 api material design Minimob Mobicow MobileCore MobiMicro NativeX Pingjam RevMob StarApplication startapp TapContext touched location Widdit

Count per Day

  • 347Reads yesterday:
  • 463859Total visitors:
  • 79Visitors today:
  • 2452Visitors per month:
  • 0Visitors currently online:
© Copyright 2014. Theme by BloomPixel.
Posting....