一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android實現GPS定位代碼實例

Android實現GPS定位代碼實例

2021-03-03 15:00Android開發網 Android

這篇文章主要介紹了Android實現GPS定位實例,對關鍵操作部份給出代碼示例并做了一定的注釋,需要的朋友可以參考下

通過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"
  android:text="定位" />
 <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
  
 }
};

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产激情视频网站 | 亚洲精品国产精品麻豆99 | 日本一区二区高清免费不卡 | 女人张开腿让男人桶视频免费大全 | 国产精品第2页 | 日本高清视频在线观看 | 四影虎库最新2021 | 91麻豆精品激情在线观看最新 | 加勒比一本大道在线 | 欧洲网色偷偷亚洲男人的天堂 | 美女被爆操 | 亚洲日本aⅴ片在线观看香蕉 | 欧美整片完整片视频在线 | 热99这里有精品综合久久 | 四虎永久免费地址在线网站 | 亚洲啊v天堂 | 日本妇人成熟免费观看18 | 7777色鬼xxxx欧美色夫 | 视频在线观看一区二区三区 | 黑人干亚洲人 | 国产二区视频在线观看 | 亚久久伊人精品青青草原2020 | 国产原创一区二区 | 日本艳鉧动漫1~6完整版在 | 国产麻豆剧果冻传媒观看免费视频 | 色综合久久天天综合观看 | 男老头澡堂gay老头456 | 亚洲精品福利在线 | 欧美聚众性派对hdsex | 久久综合香蕉久久久久久久 | 欧美a级v片在线观看一区 | 色v在线| julia ann全部在线hd | 国产精品麻豆99久久 | 情趣内衣情趣玩具play | 性夜a爽黄爽 | 日韩精品高清自在线 | 精品国产品在线18年 | 欧美亚洲一区二区三区 | 国产做a爰片久久毛片 | 女教师雪白老汉 |