通過GPS取得的是一個Location類型的經(jīng)緯度, 可以轉(zhuǎn)換為兩個Double 緯度和經(jīng)度.
緯度: 23.223871812820435
緯度: 113.58986039161628
首先創(chuàng)建一個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 是存放經(jīng)緯度的一個類型
LocationManager是位置管理服務(wù)類型
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); //結(jié)束定位按鈕 } gpsIsOpen是自己寫的查看當(dāng)前GPS是否開啟 getLocation 是自己寫的一個獲取定位信息的方法 mLocationManager.removeUpdates()是停止當(dāng)前的GPS位置監(jiān)聽 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經(jīng)度:" + mLocation.getLongitude()); else textView.setText( "獲取不到數(shù)據(jù)" ); } 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; } 判斷當(dāng)前是否開啟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; } 該方法獲取當(dāng)前的經(jīng)緯度, 第一次獲取總是 null 后面從LocationListener獲取已改變的位置 mLocationManager.requestLocationUpdates()是開啟一個LocationListener等待位置變化 private Location getLocation() { //獲取位置管理服務(wù) mLocationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); //查找服務(wù)信息 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位置改變后得到新的經(jīng)緯度 private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // TODO Auto-generated method stub if (location != null ) textView.setText( "維度:" + location.getLatitude() + "\n經(jīng)度:" + location.getLongitude()); else textView.setText( "獲取不到數(shù)據(jù)" + 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 } }; |