From ac7633d8149a28af288ac0b850850cef9b13c151 Mon Sep 17 00:00:00 2001
From: sjtufs <sjtu_fs@outlook.com>
Date: Sun, 25 Aug 2013 15:45:55 +0800
Subject: This is alpha

---
 .../gpstracking/AndroidGPSTrackingActivity.java    |  50 ++++++
 .../src/com/example/gpstracking/GPSTracker.java    | 200 +++++++++++++++++++++
 .../src/com/example/gpstracking/Tracker.java       |  33 ++++
 3 files changed, 283 insertions(+)
 create mode 100644 misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java
 create mode 100644 misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java
 create mode 100644 misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java

(limited to 'misc/client/gps-demo/AndroidGPSTracking/src/com/example')

diff --git a/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java
new file mode 100644
index 0000000..cdc1413
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java
@@ -0,0 +1,50 @@
+package com.example.gpstracking;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.Toast;
+
+public class AndroidGPSTrackingActivity extends Activity {
+	
+	Button btnShowLocation;
+	
+	// GPSTracker class
+	GPSTracker gps;
+	
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+    	
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+        
+        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
+        
+        // show location button click event
+        btnShowLocation.setOnClickListener(new View.OnClickListener() {
+			
+			@Override
+			public void onClick(View arg0) {		
+				// create class object
+		        gps = new GPSTracker(AndroidGPSTrackingActivity.this);
+
+				// check if GPS enabled		
+		        if(gps.canGetLocation()){
+		        	
+		        	double latitude = gps.getLatitude();
+		        	double longitude = gps.getLongitude();
+		        	
+		        	Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();	
+		        }else{
+		        	// can't get location
+		        	// GPS or Network is not enabled
+		        	// Ask user to enable GPS/network in settings
+		        	gps.showSettingsAlert();
+		        }
+				
+			}
+		});
+    }
+    
+}
\ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java
new file mode 100644
index 0000000..f1e77ad
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java
@@ -0,0 +1,200 @@
+package com.example.gpstracking;
+
+import android.app.AlertDialog;
+import android.app.Service;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.provider.Settings;
+import android.util.Log;
+
+public class GPSTracker extends Service implements LocationListener {
+
+	private final Context mContext;
+
+	// flag for GPS status
+	boolean isGPSEnabled = false;
+
+	// flag for network status
+	boolean isNetworkEnabled = false;
+
+	// flag for GPS status
+	boolean canGetLocation = false;
+
+	Location location; // location
+	double latitude; // latitude
+	double longitude; // longitude
+
+	// The minimum distance to change Updates in meters
+	private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
+
+	// The minimum time between updates in milliseconds
+	private static final long MIN_TIME_BW_UPDATES = 10 * 60 * 1; // 1 minute
+
+	// Declaring a Location Manager
+	protected LocationManager locationManager;
+
+	public GPSTracker(Context context) {
+		this.mContext = context;
+		getLocation();
+	}
+
+	public Location getLocation() {
+		try {
+			locationManager = (LocationManager) mContext
+					.getSystemService(LOCATION_SERVICE);
+
+			// getting GPS status
+			isGPSEnabled = locationManager
+					.isProviderEnabled(LocationManager.GPS_PROVIDER);
+
+			// getting network status
+			isNetworkEnabled = locationManager
+					.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
+
+			if (!isGPSEnabled && !isNetworkEnabled) {
+				// no network provider is enabled
+			} else {
+				this.canGetLocation = true;
+				if (isNetworkEnabled) {
+					locationManager.requestLocationUpdates(
+							LocationManager.NETWORK_PROVIDER,
+							MIN_TIME_BW_UPDATES,
+							MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+					Log.d("Network", "Network");
+					if (locationManager != null) {
+						location = locationManager
+								.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
+						if (location != null) {
+							latitude = location.getLatitude();
+							longitude = location.getLongitude();
+						}
+					}
+				}
+				// if GPS Enabled get lat/long using GPS Services
+				if (isGPSEnabled) {
+					if (location == null) {
+						locationManager.requestLocationUpdates(
+								LocationManager.GPS_PROVIDER,
+								MIN_TIME_BW_UPDATES,
+								MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+						Log.d("GPS Enabled", "GPS Enabled");
+						if (locationManager != null) {
+							location = locationManager
+									.getLastKnownLocation(LocationManager.GPS_PROVIDER);
+							if (location != null) {
+								latitude = location.getLatitude();
+								longitude = location.getLongitude();
+							}
+						}
+					}
+				}
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		return location;
+	}
+	
+	/**
+	 * Stop using GPS listener
+	 * Calling this function will stop using GPS in your app
+	 */
+	public void stopUsingGPS(){
+		if(locationManager != null){
+			locationManager.removeUpdates(GPSTracker.this);
+		}		
+	}
+	
+	/**
+	 * Function to get latitude
+	 */
+	public double getLatitude(){
+		if(location != null){
+			latitude = location.getLatitude();
+		}
+		
+		// return latitude
+		return latitude;
+	}
+	
+	/**
+	 * Function to get longitude
+	 */
+	public double getLongitude(){
+		if(location != null){
+			longitude = location.getLongitude();
+		}
+		
+		// return longitude
+		return longitude;
+	}
+	
+	/**
+	 * Function to check GPS/wifi enabled
+	 * @return boolean
+	 */
+	public boolean canGetLocation() {
+		return this.canGetLocation;
+	}
+	
+	/**
+	 * Function to show settings alert dialog
+	 * On pressing Settings button will lauch Settings Options
+	 */
+	public void showSettingsAlert(){
+		AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
+   	 
+        // Setting Dialog Title
+        alertDialog.setTitle("GPS is settings");
+ 
+        // Setting Dialog Message
+        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
+ 
+        // On pressing Settings button
+        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
+            public void onClick(DialogInterface dialog,int which) {
+            	Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+            	mContext.startActivity(intent);
+            }
+        });
+ 
+        // on pressing cancel button
+        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+            public void onClick(DialogInterface dialog, int which) {
+            dialog.cancel();
+            }
+        });
+ 
+        // Showing Alert Message
+        alertDialog.show();
+	}
+
+	@Override
+	public void onLocationChanged(Location location) {
+	}
+
+	@Override
+	public void onProviderDisabled(String provider) {
+	}
+
+	@Override
+	public void onProviderEnabled(String provider) {
+	}
+
+	@Override
+	public void onStatusChanged(String provider, int status, Bundle extras) {
+	}
+
+	@Override
+	public IBinder onBind(Intent arg0) {
+		return null;
+	}
+}
diff --git a/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java
new file mode 100644
index 0000000..2e08a91
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java
@@ -0,0 +1,33 @@
+package com.example.gpstracking;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class Tracker implements Runnable {
+
+	private static final long TIME_DELTA = 1000 * 60 * 5;	
+
+	Controller controller;
+
+	public Tracker(Controller newController) {
+		controller = newController;
+	}
+
+	public void run() {
+		public Timer timer;
+		TimerTask task = new GPSTask();	
+		timer.schedule(new GPSTask(), 0, TIME_DELTA);
+	}
+
+	class GPSTask extends TimerTask {
+		public void run() {
+			GPSTracker tracker;
+			tracker = new GPSTracker(Tracker.this);
+
+			double latitude = tracker.getLatitude();
+			double longitude = tracker.getLongitude();
+
+			controller.recieveLocation(latitude, longitude);
+		}
+	}
+}
-- 
cgit v1.2.3-70-g09d2