通過GPS取得的是一個Location類型的經緯度, 可以轉換為兩個Double 緯度和經度.
緯度: 23.223871812820435
緯度: 113.58986039161628
首先創建一個TextView和兩個Button
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
< TextView android:id = "@+id/text" android:layout_width = "fill_parent" android:layout_height = "wrap_content" /> < Button android:id = "@+id/btnStart" android:layout_width = "wrap_content" android:layout_height = "wrap_content" < Button android:id = "@+id/btnStop" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "停止" /> |
然后添加主Activity的代碼
Location 是存放經緯度的一個類型
LocationManager是位置管理服務類型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
private Button btnStart; private Button btnStop; private TextView textView; private Location mLocation; private LocationManager mLocationManager; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); btnStart = (Button)findViewById(R.id.btnStart); btnStop = (Button)findViewById(R.id.btnStop); textView = (TextView)findViewById(R.id.text); btnStart.setOnClickListener(btnClickListener); //開始定位 btnStop.setOnClickListener(btnClickListener); //結束定位按鈕 } gpsIsOpen是自己寫的查看當前GPS是否開啟 getLocation 是自己寫的一個獲取定位信息的方法 mLocationManager.removeUpdates()是停止當前的GPS位置監聽 public Button.OnClickListener btnClickListener = new Button.OnClickListener() { public void onClick(View v) { Button btn = (Button)v; if (btn.getId() == R.id.btnStart) { if (!gpsIsOpen()) return ; mLocation = getLocation(); if (mLocation != null ) textView.setText( "維度:" + mLocation.getLatitude() + "\n經度:" + mLocation.getLongitude()); else textView.setText( "獲取不到數據" ); } else if (btn.getId() == R.id.btnStop) { mLocationManager.removeUpdates(locationListener); } } }; private boolean gpsIsOpen() { boolean bRet = true ; LocationManager alm = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); if (!alm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText( this , "未開啟GPS" , Toast.LENGTH_SHORT).show(); bRet = false ; } else { Toast.makeText( this , "GPS已開啟" , Toast.LENGTH_SHORT).show(); } return bRet; } 判斷當前是否開啟GPS private boolean gpsIsOpen() { boolean bRet = true ; LocationManager alm = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); if (!alm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText( this , "未開啟GPS" , Toast.LENGTH_SHORT).show(); bRet = false ; } else { Toast.makeText( this , "GPS已開啟" , Toast.LENGTH_SHORT).show(); } return bRet; } 該方法獲取當前的經緯度, 第一次獲取總是 null 后面從LocationListener獲取已改變的位置 mLocationManager.requestLocationUpdates()是開啟一個LocationListener等待位置變化 private Location getLocation() { //獲取位置管理服務 mLocationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); //查找服務信息 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); //定位精度: 最高 criteria.setAltitudeRequired( false ); //海拔信息:不需要 criteria.setBearingRequired( false ); //方位信息: 不需要 criteria.setCostAllowed( true ); //是否允許付費 criteria.setPowerRequirement(Criteria.POWER_LOW); //耗電量: 低功耗 String provider = mLocationManager.getBestProvider(criteria, true ); //獲取GPS信息 Location location = mLocationManager.getLastKnownLocation(provider); mLocationManager.requestLocationUpdates(provider, 2000 , 5 , locationListener); return location; } 改方法是等待GPS位置改變后得到新的經緯度 private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // TODO Auto-generated method stub if (location != null ) textView.setText( "維度:" + location.getLatitude() + "\n經度:" + location.getLongitude()); else textView.setText( "獲取不到數據" + Integer.toString(nCount)); } public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }; |