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 }

 

posted @ 2016-12-29 16:23  贵^_^公子  阅读(3392)  评论(0编辑  收藏  举报