package com.luochuang.GPs.provider;

import java.util.List;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class LocationProvider {
	// 因为手機的位置並不是固定不變的,因此为了避免多次調用獲取GPS信息,這裏設置成單例模式
	public static Context context;
	public static LocationProvider LocationInfoProvider;
	private static LocationManager lm;
	private SharedPreferences sp;

	private LocationProvider() {

	}

	public static LocationProvider getInstance(Context context) {
		if (LocationInfoProvider == null) {
			lm = (LocationManager) context
					.getSystemService(Context.LOCATION_SERVICE);
			context = context;
			LocationInfoProvider = new LocationProvider();
		}
		return LocationInfoProvider;
	}

	/**
	 * 獲取手機最後請求到的位置
	 * 
	 * @return
	 */

	public String getLocation() {
		// 獲取最佳的位置提供者
		List<String> providers = lm.getAllProviders();
		Criteria critercia = new Criteria();
		critercia.setAccuracy(Criteria.ACCURACY_FINE);// 設置Provider的精確度
		critercia.setPowerRequirement(Criteria.POWER_HIGH);// 電量消耗越多位置越准確
		critercia.setCostAllowed(true);// 設置Provider是否產生費用
		String provider = lm.getBestProvider(critercia, true);// 這裏是GPS
		System.out.println("最好的位置提供者" + provider);
		lm.requestLocationUpdates(provider, 6000, 100, new myListender());// 通過给定的Provider名稱,周期性地通知當前Activity關於参數minTime,minDistance的說明是指當用戶位置改變多少緯度時候多長時間更新下這個用戶的位置
		return context.getSharedPreferences("config", Context.MODE_PRIVATE)
				.getString("location", "");
	}

	public class myListender implements LocationListener {
		/**
		 * 當手機位置發生改變的時候 調用(可以獲取經緯度信息)
		 */
		@Override
		public void onLocationChanged(Location location) {
			location.getAccuracy();
			String Latitude = "Latitude" + location.getLatitude();// 經度
			String Longitude = "Longitude" + location.getLongitude();// 緯度
			sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
			Editor editor = sp.edit();
			editor.putString("location", Latitude + Longitude);
			editor.commit();
		}

		/**
		 * 當某個位置提供者的狀態發生改變的時候
		 */
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {

		}

		/**
		 * 某一個設備被打開的時候
		 */
		@Override
		public void onProviderEnabled(String provider) {

		}

		/**
		 * 某一個設備被關閉的時候
		 */
		@Override
		public void onProviderDisabled(String provider) {

		}

	}

}

 記得要加權限:

  1. < uses-permission   android:name = "android.permission.ACCESS_COARSE_LOCATION"   />   
  2.   
  3.  < uses-permission   android:name = "android.permission.INTERNET"   />   
  4.   
  5.  < uses-permission   android:name = "android.permission.ACCESS_FINE_LOCATION"   />  

 

 

第二步:檢測手機的SIM卡號是否變更,變更就往指定的手機號上發送信息。(每次換sim總是要關機吧,所以在這裏注冊一個開启的启動廣播,權限为1000,每次启動的時候就檢查。

創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()