亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android獲取當前位置的經緯度數據

2020-04-11 10:49:56
字體:
來源:轉載
供稿:網友

現在有這么一個需求:開啟一個Service服務,獲取當前位置的經緯度數據,將獲取的數據以廣播的方式發送出去,注冊廣播的Activity接收廣播信息,并將接收到的數據在當前Activity顯示,如果當前位置發生變化,經緯度數據改變,獲取改變后的經緯度數據,通過Handler發送消息,更新UI界面,顯示更新后的內容,請問這樣子的Demo該如何實現?

LocationTool獲取當前位置信息

Android手機獲取當前位置的方式:GPS定位,WIFI定位,基站定位,當前Demo使用GPS衛星定位,在LocationTool中返回Location、LocationManager兩者對象,通過Location提供的getLatitude()、getLongitude()讀取經緯度數據,同時添加位置改變監聽器MyLocationListener,具體代碼如下:

package cn.teachcourse.utils;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.provider.Settings; import android.widget.Toast;  /*  @author postmaster@teachcourse.cn  @date 創建于:2016-1-22  */ public class LocationTool {   public Location getLocation() {     return mLocation;   }    public void setLocation(Location location) {     this.mLocation = location;   }    private Context context;   private Location mLocation;   private LocationManager mLocationManager;    public LocationTool(Context context) {     super();      mLocationManager = (LocationManager) context         .getSystemService(Context.LOCATION_SERVICE);     mLocation = mLocationManager.getLastKnownLocation(getProvider());          mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,         2000, 10, new MyLocationListener(this));   }    // 獲取Location Provider   private String getProvider() {     // 構建位置查詢條件     Criteria criteria = new Criteria();     // 查詢精度:高     criteria.setAccuracy(Criteria.ACCURACY_FINE);     // 是否查詢海撥:否     criteria.setAltitudeRequired(false);     // 是否查詢方位角 : 否     criteria.setBearingRequired(false);     // 是否允許付費:是     criteria.setCostAllowed(true);     // 電量要求:低     criteria.setPowerRequirement(Criteria.POWER_LOW);     // 返回最合適的符合條件的provider,第2個參數為true說明 , 如果只有一個provider是有效的,則返回當前provider     return mLocationManager.getBestProvider(criteria, true);   }      public LocationManager getLocationManager() {      return mLocationManager;   }    private LocationListener mLocationListener = new LocationListener() {      @Override     public void onStatusChanged(String provider, int status, Bundle extras) {       // TODO Auto-generated method stub      }      @Override     public void onProviderEnabled(String provider) {       Location l = mLocationManager.getLastKnownLocation(provider);              if (l != null) {         mLocation = l;       }            }      @Override     public void onProviderDisabled(String provider) {       mLocation = null;     }      @Override     public void onLocationChanged(Location location) {       if (location != null) {         mLocation = location;       }      }   };    public void closeLocation() {     if (mLocationManager != null) {       if (mLocationManager != null) {         mLocationManager.removeUpdates(mLocationListener);         mLocationListener = null;       }       mLocationManager = null;     }   } } 

MyLocationListener位置改變監聽器

LocationManager對象調用requestLocationUpdates(String provider, long minTime, float minDistance,LocationListener listener),在回調的方法中獲取改變后的Location對象,其中provider表示LocationManager.GPS_PROVIDER,minTime表示最短時間間隔內更新位置信息(單位毫秒),minDistance表示最短距離內更新位置信息(單位米),MyLocationListener繼承LocationListener,需要重寫的方法如下:

package cn.teachcourse.utils;  import android.location.Location; import android.location.LocationListener; import android.os.Bundle;  /*  @author postmaster@teachcourse.cn  @date 創建于:2016-1-22  */  public class MyLocationListener implements LocationListener {    private LocationTool gpsTool;    /**構造方法,傳入LocationTool    * @param gpsTool    */   public MyLocationListener(LocationTool gpsTool) {     super();     this.gpsTool = gpsTool;   }    /**    * 當前位置改變后,回調onLocationChanged方法,獲取改變后的Location對象    *    */   @Override   public void onLocationChanged(Location location) {     if (location != null) {       gpsTool.setLocation(location);     }    }    /**    * 當provider狀態改變時回調的方法,當前的provider無法讀取位置信息或者provider從無法讀取位置信息變為能夠讀取為信息被回調的方法    *    */   @Override   public void onStatusChanged(String provider, int status, Bundle extras) {     // TODO Auto-generated method stub    }    /**    * 當provider被用戶允許開啟,回調的onProviderEnabled方法,比如:開啟定位功能,回調該方法    *    */   @Override   public void onProviderEnabled(String provider) {     Location l = gpsTool.getLocationManager()         .getLastKnownLocation(provider);      if (l != null) {       gpsTool.setLocation(l);     }    }    /**    * 當provider不被用戶允許開啟,回調的onProviderDisabled方法,比如:無法開啟定位功能,回調該方法    *    */   @Override   public void onProviderDisabled(String provider) {     gpsTool.setLocation(null);    }  } 

LocationService服務讀取位置信息

為什么要開啟Service呢?Service和Activity、Fragment一樣也有自己的生命周期,onCreate――>onStartCommand(onStart)――>onUnbind――>onRebind――>onDestroy,在LocationService執行的操作是啟動一個線程獲取更新后的位置信息,并以廣播的方式發送出去,具體代碼如下:

package cn.teachcourse.utils;  import android.app.Activity; import android.app.Service; import android.content.Context; import android.content.Intent; import android.location.Location; import android.location.LocationManager; import android.os.IBinder; import android.provider.Settings; import android.widget.Toast;  /*  @author postmaster@teachcourse.cn  @date 創建于:2016-1-22  */ public class LocationService extends Service {   private LocationTool mGPSTool = null;   private boolean threadDisable = false;   private final static String TAG = LocationService.class.getSimpleName();    @Override   public void onCreate() {     // TODO Auto-generated method stub     super.onCreate();     mGPSTool = new LocationTool(this);     startThread();   }    private void startThread() {     new Thread(new Runnable() {       @Override       public void run() {         while (!threadDisable) {           try {             Thread.sleep(1000);           } catch (InterruptedException e) {             e.printStackTrace();           }           if (mGPSTool != null) { // 當結束服務時gps為空             // 獲取經緯度             Location location = mGPSTool.getLocation();              // 發送廣播             Intent intent = new Intent();             intent.putExtra("lat",                 location == null ? "" : location.getLatitude()                     + "");             intent.putExtra("lon",                 location == null ? "" : location.getLongitude()                     + "");             intent.setAction("cn.teachcourse.utils.GPSService");                          sendBroadcast(intent);           }          }       }     }).start();   }    @Override   public void onDestroy() {     super.onDestroy();     threadDisable = true;     if (mGPSTool != null) {       mGPSTool.closeLocation();       mGPSTool = null;     }   }    @Override   public IBinder onBind(Intent intent) {          return null;   }  } 

MainActivity啟動服務、注冊廣播、顯示位置信息

在MainActivity需要做的事情有:第一啟動LocationService服務,調用startService()方法;第二注冊廣播接收器(BroadcastReceiver),創建了一個內部類MyBroadcastReceiver,繼承BroadcastReceiver,重寫onReceive方法;第三獲取經緯度數據,更新UI界面,顯示當前位置信息,具體代碼如下:

//啟動服務 startService(new Intent(this, LocationService.class)); //注冊廣播 private class MyReceiver extends BroadcastReceiver {      @Override     public void onReceive(Context context, Intent intent) {       Bundle bundle = intent.getExtras();       String lon = bundle.getString("lon");       String lat = bundle.getString("lat");       if (!TextUtils.isEmpty(lon) && !TextUtils.isEmpty(lat)) {         mLatitude = lat;         mLongitude = lon;         isObtainLoc = true;                  new Thread(new Runnable() {                      @Override           public void run() {             Message msg = new Message();             msg.what = REFRESH_UI;// 發送消息,通知刷新界面             mHandler.sendMessage(msg);           }         }).start();       }     }    }  //更新UI界面 private Handler mHandler = new Handler() {      @Override     public void handleMessage(Message msg) {       // TODO Auto-generated method stub       super.handleMessage(msg);       switch (msg.what) {       case REFRESH_UI:          reFreshUI();          break;       default:         break;       }     }   };    private void reFreshUI() {     if (isObtainLoc) {       mTextView.setText("目前經緯度/n經度:" + mLongitude + "/n緯度:" + mLatitude);       mDialog.dismiss();     }    } 

以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品中文字幕女同| 久久亚洲精品视频| 成人欧美一区二区三区在线湿哒哒| 成人有码在线播放| 亚洲欧美中文日韩v在线观看| 欧美日韩国内自拍| 国产精品久久久久99| 国产精品美女av| 日韩精品中文字幕有码专区| 色婷婷**av毛片一区| 国产玖玖精品视频| 大量国产精品视频| 蜜臀久久99精品久久久久久宅男| 国产精品美女在线观看| 91精品久久久久久久久不口人| 欧美激情网友自拍| 久久久精品一区二区三区| 欧美成人性生活| 欧美精品久久久久a| 久久九九亚洲综合| 亚洲精品成人久久| 色妞在线综合亚洲欧美| 91亚洲精品一区| 亚洲福利视频二区| 亚洲精品视频中文字幕| 92看片淫黄大片欧美看国产片| 欧美激情a∨在线视频播放| 成人做爰www免费看视频网站| 国产成人福利视频| 久久理论片午夜琪琪电影网| 这里只有精品丝袜| 欧美成人精品在线| 欧美亚洲一级片| 韩国精品久久久999| 欧美日韩裸体免费视频| 97在线视频一区| 美日韩精品免费观看视频| 日韩亚洲国产中文字幕| 日本aⅴ大伊香蕉精品视频| 久久精品99无色码中文字幕| 欧美乱大交做爰xxxⅹ性3| 国产精彩精品视频| 懂色aⅴ精品一区二区三区蜜月| 中文.日本.精品| 91精品国产综合久久香蕉最新版| 视频在线一区二区| 亚洲欧美日韩一区在线| 国产91精品视频在线观看| 另类少妇人与禽zozz0性伦| 日韩精品视频免费专区在线播放| 亚洲欧洲偷拍精品| 精品欧美aⅴ在线网站| 亚洲男人av电影| 亚洲欧美自拍一区| 欧美一区二粉嫩精品国产一线天| 77777亚洲午夜久久多人| 日韩av在线一区二区| 欧美日韩成人在线播放| 久久精品久久久久电影| 色综合天天综合网国产成人网| 国产精品视频男人的天堂| 亚洲天堂成人在线| 日本不卡视频在线播放| 日韩在线不卡视频| 九九综合九九综合| 91国内揄拍国内精品对白| 欧美国产极速在线| 成人国产在线视频| 国产日韩在线播放| 午夜精品久久久久久久白皮肤| 日韩最新免费不卡| 欧美性高潮在线| 日韩成人中文字幕在线观看| 成人激情综合网| 日本免费久久高清视频| 国模视频一区二区| x99av成人免费| 欧美怡春院一区二区三区| 成人乱色短篇合集| 久久成人精品电影| 色小说视频一区| 日韩免费在线播放| 久久精品国产96久久久香蕉| 欧美黑人xxx| 国产精品久久久久高潮| 久久天天躁夜夜躁狠狠躁2022| 久久精品电影网站| 亚洲激情小视频| 欧美精品激情blacked18| 91在线观看免费观看| 91色中文字幕| 欧美亚洲日本黄色| 国产一区二区欧美日韩| 色999日韩欧美国产| 精品精品国产国产自在线| 成人激情在线观看| 91av成人在线| 色悠久久久久综合先锋影音下载| 欧美中文在线字幕| 日韩大陆欧美高清视频区| 欧美在线视频网| 欧美一级淫片丝袜脚交| 欧美二区在线播放| 欧美在线视频观看免费网站| 欧美另类极品videosbest最新版本| 精品国产乱码久久久久久虫虫漫画| 国产精品国产三级国产aⅴ浪潮| 国产精品揄拍500视频| 亚洲成av人影院在线观看| 成人激情视频在线播放| 国产日韩精品一区二区| 亚洲精品美女网站| 久久影院资源网| 久久成年人视频| 国产精品久久网| 中文字幕精品久久| 亚洲性av网站| 精品久久久久久久久国产字幕| 亚洲a在线播放| 国产精品久久久久久久午夜| 6080yy精品一区二区三区| 日韩精品视频免费专区在线播放| 国产日韩欧美中文| 欧美视频中文在线看| 国内精品美女av在线播放| 亚洲专区中文字幕| 91成人福利在线| 亚洲人成毛片在线播放| 亚洲在线视频观看| 狠狠躁夜夜躁人人躁婷婷91| 97人洗澡人人免费公开视频碰碰碰| 国产色婷婷国产综合在线理论片a| 国产91|九色| 成人疯狂猛交xxx| 91久久精品久久国产性色也91| 欧美一性一乱一交一视频| 精品高清一区二区三区| 欧美激情va永久在线播放| 成人夜晚看av| 国产精品伦子伦免费视频| 国产精品日韩在线观看| 欧美激情精品久久久久久蜜臀| 国产精品稀缺呦系列在线| 在线观看欧美视频| 亚洲视频在线免费看| 中文字幕av一区中文字幕天堂| 隔壁老王国产在线精品| 日韩激情视频在线| 日本不卡高字幕在线2019| 亚洲第一av网| 国产丝袜一区二区| 久久99国产精品自在自在app| 亚洲人成伊人成综合网久久久| 亚洲男人天堂久| 亚洲国产精品热久久| 欧美理论在线观看| 91色琪琪电影亚洲精品久久| 国产成人精品在线播放| 久久99精品久久久久久青青91| 欧美激情中文字幕在线| 日韩有码视频在线| 91在线高清免费观看| 精品一区二区三区四区在线| 欧美日韩国产精品专区|