1.在main.xml新增一個TextView
- <TextView
- android:text="TextView"
- android:id="@+id/location"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </TextView>
2.編輯activity
- package test.location;
- import java.util.List;
- import android.app.Activity;
- import android.content.Context;
- import android.location.Location;
- import android.location.LocationListener;
- import android.location.LocationManager;
- import android.os.Bundle;
- import android.widget.TextView;
- public class HelloLocationActivity extends Activity {
- /** Called when the activity is first created. */
- //創建新專案,注意創建時,target build選擇Google APIs,這是為了添加jar文件maps.jar。
- //引入LocationManager實例。
- //在main文件中宣告TextView。
- //在Androidmanifest文件中宣告權限。
- private LocationManager locationManager;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //呼叫getSystemService()取得LocationManager物件。
- locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
- locate();
- }
- private void locate(){
- TextView tv = (TextView)findViewById(R.id.location);
- StringBuilder builder = new StringBuilder("可利用的provider");
- //呼叫getProviders(boolean EnableOnly)取得一組可用的location provider名稱,true表示為可用的;false表示停用的。
- List<String> providers = locationManager.getProviders(true);
- //定義位置監聽器,接收來自LocationManager的通知。
- LocationListener locationlistener = new LocationListener(){
- //位置管理服務利用reuqestLocationUpdates(String , long , float , LocationListener)方法註冊位置監聽器後,這些方法就會被呼叫。
- //Provider狀態改變時呼叫此方法。
- public void onStatusChanged(String provider , int status , Bundle extras){
- }
- //位置改變時呼叫此方法。
- @Override
- public void onLocationChanged(Location location) {
- // TODO Auto-generated method stub
- System.out.println("onLcationChanged");
- }
- //用戶關閉provider時呼叫此方法。
- @Override
- public void onProviderDisabled(String provider) {
- // TODO Auto-generated method stub
- System.out.println("onProviderDisabled");
- }
- //用戶啟動provider時呼叫此方法。
- @Override
- public void onProviderEnabled(String provider) {
- // TODO Auto-generated method stub
- System.out.println("onProviderEnabled");
- }
- };
- for (String provider:providers){
- //註冊目前的activity定期由provider通知位置更新。
- locationManager.requestLocationUpdates(provider, 0, 1000, locationlistener);
- builder.append("\n").append(provider).append(":");
- //回傳從provider最後所知的位置。
- Location location = locationManager.getLastKnownLocation(provider);
- if(location != null){
- double lat = location.getLatitude();
- double lng = location.getLongitude();
- builder.append("(");
- builder.append(lat);
- builder.append(",");
- builder.append(lng);
- builder.append(")");
- }else{
- builder.append("沒有訊息");
- }
- }
- tv.setText(builder);
- }
- }
3.記得在Androidmanifest文件中</application>後宣告權限,此宣告為採用GPS_PROVIDER。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>4.在真實的設備當中要獲得定位服務需要有GPS硬體支援,但在開發或測試,使用模擬器是最方便的。將Eclipse切換到DDMS模式,在Emulator control中可以找到定位服務選項,選項可以手動發送經緯度、GPX、KML格式數據來測試定位服務。如果發現選項無法調整及發送(呈現灰色),原因可能是尚未選擇裝置,在Devices中選擇裝置。
沒有留言:
張貼留言