編輯:關於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);
}
}
ViewGroup的dispatchTouchEvent理解
以下圖例子說明,OFramelayout在最外層 圖1.1 view的層級關系結論1:dispatchTouchEvent()返回false,後續的ACTION_M
ImageView的屬性android:scaleType的作用分析
在網上查了好多資料,大致都雷同,大家都是互相抄襲的,看著很費勁,不好理解,自己總結一下,留著需要看的話來查找。代碼中的例子如下:復制代碼 代碼如下:<ImageVi
自定義View——折線圖
在上一篇雷達圖中留下了一個坑——折線圖。折線圖(broken-line graph)大概是初中數學就開始學習的,用來統計一段時間內某個數據的趨勢。
Android 屏幕截屏方法匯總
1、直接使用getWindow().getDecorView().getRootView()直接使用getWindow().getDecorView().getRootV