編輯:關於Android編程
定位有GPS定位和基站定位:GPS定位是基於衛星進行定位,要求頭頂要空曠,定位誤差在2-10米,基站網絡定位是根據距離手機的距離進行定位,誤差較大,只要手機有信號即可定位;獲取gps信息分為以下幾步:
1)獲取與位置相關的服務 服務都是通過上下文獲取出來的
manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
2)選擇一種目前狀態下最好的定位方式 gps定位或者基站定位
/** * * @param manager 位置管理服務 * @return 最好的位置提供者 // gps //wifi // */ private String getProvider(LocationManager manager){ //一組查詢條件 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); //獲取精准位置、 criteria.setAltitudeRequired(false);//對海拔不敏感 criteria.setPowerRequirement(Criteria.POWER_MEDIUM);//耗電量中等 criteria.setSpeedRequired(true);//速度變化敏感 criteria.setCostAllowed(true);//產生開銷 通信費用 //返回最好的位置提供者 true 表示只返回當前已經打開的定位設備 return manager.getBestProvider(criteria, true); }
3)位置的監聽器
4)注冊位置監聽器
代碼如下:
/** * 保證這個類只存在一個實例 1 私有化構造方法 (我們不能在外部實例化這個類的對象,只能類的內部實例化一個Person類的對象) * 2 提供一個靜態的返回實例的方法 * * */ public class GPSInfoProvider { LocationManager manager; //單例 private static GPSInfoProvider mGPSInfoProvider; private static Context context; //單例 private static MyLoactionListener listener; //1.私有化構造方法 private GPSInfoProvider(){}; //2. 提供一個靜態的方法 可以返回他的一個實例 保證代碼必須執行完成 放在 synchronized 單態的GPSInfoProvider public static synchronized GPSInfoProvider getInstance(Context context){ if(mGPSInfoProvider==null){ mGPSInfoProvider = new GPSInfoProvider(); GPSInfoProvider.context = context; } return mGPSInfoProvider; } // 獲取gps 信息 public String getLocation(){ //獲取與位置相關的服務 服務都是通過上下文獲取出來的 manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE); //獲取所有的定位方式 //manager.getAllProviders(); // gps //wifi // //選擇一種目前狀態下最好的定位方式 String provider = getProvider(manager); // 注冊位置的監聽器 /** *provider 定位方式 用什麼設備定位 基站 網絡 GPS AGPS *時間 gps 多長時間重新獲取一下位置 最小為1分鐘 *位置 最短位移 位置改變多少 重新獲取一下位置 *listener 位置發生改變時 對應的回調方法 */ manager.requestLocationUpdates(provider,60000, 50, getListener()); SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); String location = sp.getString("location", ""); return location; } // 停止gps監聽 public void stopGPSListener(){ //參數為LocationListener manager.removeUpdates(getListener()); } //返回Listener實例 private synchronized MyLoactionListener getListener(){ if(listener==null){ listener = new MyLoactionListener(); } return listener; } private class MyLoactionListener implements LocationListener{ /** * 當手機位置發生改變的時候 調用的方法 */ public void onLocationChanged(Location location) { String latitude ="latitude "+ location.getLatitude(); //weidu String longtitude = "longtitude "+ location.getLongitude(); //jingdu SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); Editor editor = sp.edit(); editor.putString("location", latitude+" - "+ longtitude); editor.commit(); //最後一次獲取到的位置信息 存放到sharedpreference裡面 } /** * 某一個設備的狀態發生改變的時候 調用 可用->不可用 不可用->可用 GPS是否可用 */ public void onStatusChanged(String provider, int status, Bundle extras) { } /** * 某個設備被打開 GPS被打開 */ public void onProviderEnabled(String provider) { } /**某個設備被禁用 GPS被禁用 * */ public void onProviderDisabled(String provider) { } } /** * * @param manager 位置管理服務 * @return 最好的位置提供者 // gps //wifi // */ private String getProvider(LocationManager manager){ //一組查詢條件 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); //獲取精准位置、 criteria.setAltitudeRequired(false);//對海拔不敏感 criteria.setPowerRequirement(Criteria.POWER_MEDIUM);//耗電量中等 criteria.setSpeedRequired(true);//速度變化敏感 criteria.setCostAllowed(true);//產生開銷 通信費用 //返回最好的位置提供者 true 表示只返回當前已經打開的定位設備 return manager.getBestProvider(criteria, true); } }
以下圖例子說明,OFramelayout在最外層 圖1.1 view的層級關系結論1:dispatchTouchEvent()返回false,後續的ACTION_M
在網上查了好多資料,大致都雷同,大家都是互相抄襲的,看著很費勁,不好理解,自己總結一下,留著需要看的話來查找。代碼中的例子如下:復制代碼 代碼如下:<ImageVi
在上一篇雷達圖中留下了一個坑——折線圖。折線圖(broken-line graph)大概是初中數學就開始學習的,用來統計一段時間內某個數據的趨勢。
1、直接使用getWindow().getDecorView().getRootView()直接使用getWindow().getDecorView().getRootV