android GPS定位源碼 地圖顯示位置源碼 有用到的小伙伴自提取


  1 package com.jasgroup.cn.amhdeam;
  2 
  3 import java.io.IOException;
  4 import java.util.Iterator;
  5 
  6 import android.Manifest;
  7 import android.app.Activity;
  8 import android.content.Context;
  9 import android.content.Intent;
 10 import android.content.pm.ActivityInfo;
 11 import android.content.pm.PackageManager;
 12 import android.location.Criteria;
 13 import android.location.GpsSatellite;
 14 import android.location.GpsStatus;
 15 import android.location.Location;
 16 import android.location.LocationListener;
 17 import android.location.LocationManager;
 18 import android.location.LocationProvider;
 19 import android.os.Bundle;
 20 import android.provider.Settings;
 21 import android.support.v4.app.ActivityCompat;
 22 import android.util.Log;
 23 import android.view.WindowManager;
 24 import android.widget.EditText;
 25 import android.widget.LinearLayout;
 26 import android.widget.Toast;
 27 
 28 import com.esri.android.map.GraphicsLayer;
 29 import com.esri.android.map.Layer;
 30 import com.esri.android.map.MapView;
 31 import com.esri.android.map.ags.ArcGISDynamicMapServiceLayer;
 32 import com.esri.core.geometry.Envelope;
 33 import com.esri.core.geometry.Point;
 34 import com.esri.core.geometry.SpatialReference;
 35 import com.esri.core.map.Graphic;
 36 import com.esri.core.symbol.PictureMarkerSymbol;
 37 
 38 import org.xmlpull.v1.XmlPullParserException;
 39 
 40 public class GpsActivity extends Activity {
 41     private EditText editText;
 42     private LocationManager lm;
 43     private GraphicsLayer graphicsLayer = null;
 44     private String latitude;
 45     private String longitude;
 46     private String ip = null;
 47     private String port = null;
 48     private String userid = null;
 49     private MapView mMapView;
 50     private LinearLayout linearLayout;
 51     private Layer layer;
 52     private static final String TAG = "GpsActivity";
 53 
 54     @Override
 55     protected void onDestroy() {
 56         // TODO Auto-generated method stub
 57         super.onDestroy();
 58         //  lm.removeUpdates(locationListener);
 59     }
 60 
 61 
 62     @Override
 63     public void onCreate(Bundle savedInstanceState) {
 64         super.onCreate(savedInstanceState);
 65 
 66         setContentView(R.layout.locationutil);
 67 
 68         editText = (EditText) findViewById(R.id.editText);
 69         lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 70         SpatialReference S = SpatialReference.create(4326);
 71         Envelope envelope = new Envelope(62.938320359601796, 37.37854569628149, 66.4928652149837, 39.6757739604943);
 72         mMapView = new MapView(this, S, envelope);
 73 
 74 //      mMapView = (MapView) findViewById(R.id.map);
 75 
 76         mMapView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
 77         //添加地圖
 78         layer = new ArcGISDynamicMapServiceLayer("http://192.168.20.180:6080/arcgis/rest/services/gongquAB/MapServer");
 79         mMapView.addLayer(layer);
 80         mMapView.setExtent(envelope);
 81         graphicsLayer = new GraphicsLayer();
 82         mMapView.addLayer(graphicsLayer);
 83         setContentView(mMapView);
 84         /*
 85         接受端口信息
 86          */
 87         Bundle bundle = this.getIntent().getExtras();
 88         if (bundle != null) {
 89             userid = bundle.getString("userid");
 90             ip = bundle.getString("ip");
 91             port = bundle.getString("port");
 92         }
 93 //            tv = (TextView) findViewById(R.id.tv);
 94 //            mMapView = (MapView) findViewById(R.id.map);
 95         linearLayout = (LinearLayout) findViewById(R.id.llMap);
 96 
 97         //判斷GPS是否正常啟動
 98         if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
 99             Toast.makeText(this, "請開啟GPS導航...", Toast.LENGTH_SHORT).show();
100             //返回開啟GPS導航設置界面
101             Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
102             startActivityForResult(intent, 0);
103             return;
104         }
105 
106         //為獲取地理位置信息時設置查詢條件
107         String bestProvider = lm.getBestProvider(getCriteria(), true);
108         //獲取位置信息
109         //如果不設置查詢要求,getLastKnownLocation方法傳人的參數為LocationManager.GPS_PROVIDER
110         if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
111 
112             return;
113         }
114         Location location = lm.getLastKnownLocation(bestProvider);
115         updateToNewLocation(location);
116         //監聽狀態
117         lm.addGpsStatusListener(listener);
118         //綁定監聽,有4個參數
119         //參數1,設備:有GPS_PROVIDER和NETWORK_PROVIDER兩種
120         //參數2,位置信息更新周期,單位毫秒
121         //參數3,位置變化最小距離:當位置距離變化超過此值時,將更新位置信息
122         //參數4,監聽
123         //備注:參數2和3,如果參數3不為0,則以參數3為准;參數3為0,則通過時間來定時更新;兩者為0,則隨時刷新
124 
125         // 1秒更新一次,或最小位移變化超過1米更新一次;
126         //注意:此處更新准確度非常低,推薦在service里面啟動一個Thread,在run中sleep(10000);然后執行handler.sendMessage(),更新位置
127         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
128     }
129 
130     @Override
131     protected void onResume() {
132         /**
133          * 設置為橫屏
134          */
135         if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
136             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
137 
138             if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
139 
140                 return;
141             }
142             lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1,
143                     locationListener);
144         }
145         super.onResume();
146     };
147 
148     //位置監聽
149     private LocationListener locationListener = new LocationListener() {
150 
151         /**
152          * 位置信息變化時觸發
153          */
154         public void onLocationChanged(Location location) {
155             updateToNewLocation(location);
156             Log.i(TAG, "時間:" + location.getTime());
157             Log.i(TAG, "經度:" + location.getLongitude());
158             Log.i(TAG, "緯度:" + location.getLatitude());
159             Log.i(TAG, "海拔:" + location.getAltitude());
160         }
161 
162         /**
163          * GPS狀態變化時觸發
164          */
165         public void onStatusChanged(String provider, int status, Bundle extras) {
166             switch (status) {
167                 //GPS狀態為可見時
168                 case LocationProvider.AVAILABLE:
169                     Log.i(TAG, "當前GPS狀態為可見狀態");
170                     break;
171                 //GPS狀態為服務區外時
172                 case LocationProvider.OUT_OF_SERVICE:
173                     Log.i(TAG, "當前GPS狀態為服務區外狀態");
174                     break;
175                 //GPS狀態為暫停服務時
176                 case LocationProvider.TEMPORARILY_UNAVAILABLE:
177                     Log.i(TAG, "當前GPS狀態為暫停服務狀態");
178                     break;
179             }
180         }
181 
182         /**
183          * GPS開啟時觸發
184          */
185         public void onProviderEnabled(String provider) {
186             if (ActivityCompat.checkSelfPermission(GpsActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(GpsActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
187                 // TODO: Consider calling
188                 //    ActivityCompat#requestPermissions
189                 // here to request the missing permissions, and then overriding
190                 //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
191                 //                                          int[] grantResults)
192                 // to handle the case where the user grants the permission. See the documentation
193                 // for ActivityCompat#requestPermissions for more details.
194                 return;
195             }
196             Location location = lm.getLastKnownLocation(provider);
197             updateView(location);
198         }
199 
200         /**
201          * GPS禁用時觸發
202          */
203         public void onProviderDisabled(String provider) {
204             updateView(null);
205         }
206 
207 
208     };
209 
210     //狀態監聽
211     GpsStatus.Listener listener = new GpsStatus.Listener() {
212         public void onGpsStatusChanged(int event) {
213             switch (event) {
214                 //第一次定位
215                 case GpsStatus.GPS_EVENT_FIRST_FIX:
216                     Log.i(TAG, "第一次定位");
217                     break;
218                 //衛星狀態改變
219                 case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
220                     Log.i(TAG, "衛星狀態改變");
221                     //獲取當前狀態
222                     if (ActivityCompat.checkSelfPermission(GpsActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
223                         // TODO: Consider calling
224                         //    ActivityCompat#requestPermissions
225                         // here to request the missing permissions, and then overriding
226                         //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
227                         //                                          int[] grantResults)
228                         // to handle the case where the user grants the permission. See the documentation
229                         // for ActivityCompat#requestPermissions for more details.
230                         return;
231                     }
232                     GpsStatus gpsStatus = lm.getGpsStatus(null);
233                     //獲取衛星顆數的默認最大值
234                     int maxSatellites = gpsStatus.getMaxSatellites();
235                     //創建一個迭代器保存所有衛星
236                     Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
237                     int count = 0;
238                     while (iters.hasNext() && count <= maxSatellites) {
239                         GpsSatellite s = iters.next();
240                         count++;
241                     }
242                     System.out.println("搜索到:"+count+"顆衛星");
243                     break;
244                 //定位啟動
245                 case GpsStatus.GPS_EVENT_STARTED:
246                     Log.i(TAG, "定位啟動");
247                     break;
248                 //定位結束
249                 case GpsStatus.GPS_EVENT_STOPPED:
250                     Log.i(TAG, "定位結束");
251                     break;
252             }
253         };
254     };
255 
256     /**
257      * 實時更新文本內容
258      *
259      * @param location
260      */
261     private void updateView(Location location){
262         if(location!=null){
263             editText.setText("設備位置信息\n\n經度:");
264             editText.append(String.valueOf(location.getLongitude()));
265             editText.append("\n緯度:");
266             editText.append(String.valueOf(location.getLatitude()));
267         }else{
268             //清空EditText對象
269             editText.getEditableText().clear();
270         }
271     }
272 
273     /**
274      * 返回查詢條件
275      * @return
276      */
277     private Criteria getCriteria(){
278         Criteria criteria=new Criteria();
279         //設置定位精確度 Criteria.ACCURACY_COARSE比較粗略,Criteria.ACCURACY_FINE則比較精細
280         criteria.setAccuracy(Criteria.ACCURACY_FINE);
281         //設置是否要求速度
282         criteria.setSpeedRequired(true);
283         // 設置是否允許運營商收費
284         criteria.setCostAllowed(false);
285         //設置是否需要方位信息
286         criteria.setBearingRequired(false);
287         //設置是否需要海拔信息
288         criteria.setAltitudeRequired(false);
289         // 設置對電源的需求
290         criteria.setPowerRequirement(Criteria.POWER_LOW);
291         return criteria;
292     }
293     private Location updateToNewLocation(Location location) {
294         System.out.println("--------zhixing--2--------");
295         String latLongString;
296         if (location != null) {
297             //設置當前坐標
298             Point point=new Point();
299             point.setX(location.getLongitude());
300             point.setY(location.getLatitude());
301             PictureMarkerSymbol pictureMarkerSymbol=new PictureMarkerSymbol(getResources().getDrawable(R.drawable.location1));
302 
303             Graphic graphic=new Graphic(point,pictureMarkerSymbol);
304 //            Graphic graphic=new Graphic(point,new SimpleMarkerSymbol(Color.RED,25, SimpleMarkerSymbol.STYLE.CIRCLE));
305             graphicsLayer.addGraphic(graphic);//添加地圖中
306 
307             latitude = Double.toString(location.getLatitude());
308             longitude = Double.toString(location.getLongitude());
309             latLongString = "緯度:" + latitude + "\n經度:" + longitude;
310             System.out.println("經度:" + longitude + "緯度:" + latitude);
311             sendp();
312         } else {
313             latLongString = "無法獲取地理信息,請稍后...";
314         }
315         if(latitude!=null){
316             System.out.println("--------反饋信息----------"+ String.valueOf(latitude));
317         }
318         Toast.makeText(getApplicationContext(), latLongString, Toast.LENGTH_SHORT).show();
319 
320         return location;
321     }
322     public void  sendp(){
323         new Thread(){
324             @Override
325             public void run(){
326                 //   while (!exit){
327                 try {
328                     AsyncTaskUtil.getData(userid, latitude, longitude, ip, port);
329 
330                 } catch (IOException e) {
331                     e.printStackTrace();
332                 } catch (XmlPullParserException e) {
333                     e.printStackTrace();
334                 }
335             }
336             //     }
337         }.start();
338     }
339 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM