編輯:關於Android編程
手機定位基於以下三種方式:1. 網絡定位 ;2. 基站定位; 3. GPS定位
1 網絡定位
前提是必須連上網絡:Wifi、3G、2G
獲取到IP地址
例如:彩虹版QQ,珊瑚蟲版QQ,就有一個功能顯示對方的IP;
根據IP顯示具體的位置;
原理是建立一個庫那個IP地址對應那個地方;早期警方破案就采用此特點;
有局限性:針對固定的IP地址。
如果手機網或者ip地址是動態分布IP,這個偏差就很大。這種情況是無法滿足需求的。
2 基站定位
工作原理:手機能打電話,是需要基站的。手機定位也是用基站的。
手機附近能收到3個基站的信號,就可以定位了。
基站定位有可能很准確,比如基站多的地方;
如果基站少的話就會相差很大。
精確度:幾十米到幾公裡不等;
3 GPS定位
A-GPS 使用了衛星定位 需要聯網輔助修正位置(手機經常使用,優先請求網絡,獲取之前保存的衛星軌道的信息cache,)
特點是:需要搜索衛星, 頭頂必須是空曠的;
影響條件:雲層、大廈、大樹。
以下是實現的代碼:
package com.andy.gpsdemo;
import com.example.gpsdemo.R;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
public class MainActivity extends ActionBarActivity {
// 位置服務
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
/*List provider = locationManager.getAllProviders();
for (String string : provider) {
System.out.println(string);
}*/
// 注冊監聽位置服務
// 給位置提供者設置條件
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);// 獲取精確的位置
// criteria.setAccuracy(Criteria.ACCURACY_FINE);//設置為最大精度
// criteria.setAltitudeRequired(false);//不要求海拔信息
// criteria.setBearingRequired(false);//不要求方位信息
// criteria.setCostAllowed(true);//是否允許付費
// criteria.setPowerRequirement(Criteria.POWER_LOW);//對電量的要求
String proveder = locationManager.getBestProvider(criteria, true);
locationManager.requestLocationUpdates(proveder, 0, 0,
new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 當改變位置時回調
String longitude = "經度:" + location.getLongitude();
String latitudeString = "維度:" + location.getLatitude();
String accuracy = "精確度:" + location.getAccuracy();
TextView textView = new TextView(MainActivity.this);
textView.setText(longitude + "\n" + latitudeString
+ "\n" + accuracy);
setContentView(textView);
}
@Override
public void onProviderDisabled(String provider) {
// 當一個位置提供者不可以使用
}
@Override
public void onProviderEnabled(String provider) {
// 當一個位置提供者可以使用
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// 當狀態發生改變的時候回調 開啟--關閉 ;關閉--開啟
}
});
}
}
需要加入的權限為:
Android framwork 分析之智能指針LightRefBase ,sp,wp,RefBase
Android的framework層都是由c++來實現的 大家都知道c++最令人頭痛的莫過於內存洩漏了 ,如果是一個人開發還好 當new出來一個對象後 應該會記得dele
SEAndroid安全機制對Android屬性訪問的保護分析
Android系統通過屬性暴露設備和運行時信息,並且可以通過設置屬性來控制系統行為。因此,屬性也像文件一樣,是一種需要保護的資源。在啟用SEAndroid之前,敏感屬性只
ListView常用拓展(Android群英傳)
ListView雖然使用廣泛,但系統原生的ListView顯然是不能滿足用戶在審美、功能上不斷提高的需求。不過也不要緊,Android完全可以定制化,讓我們非常方便地對原
Android自定義軟鍵盤
前不久由於項目的需要,要做一個自定義的軟鍵盤,我也上網看了很多,都覺得很繁瑣,所以想自己動手實現個。以備不時之需把。我選擇了參考百度錢包的軟鍵盤,看起來還不錯:publi