當前位置:首頁 » 安卓系統 » android定位api

android定位api

發布時間: 2022-06-18 01:34:37

⑴ 在android中怎麼寫百度api根據指定位置定位

網路地圖SDK為開發者們提供了如下類型的地圖覆蓋物:


我的位置圖層(MyLocationOverlay):用於顯示用戶當前位置的圖層(支持自定義位置圖標);


Poi搜索結果圖層(PoiOverlay):用於顯示興趣點搜索結果的圖層;


路線圖層(RouteOverlay):公交、步行和駕車線路圖層,將公交、步行和駕車出行方案的路線及關鍵點顯示在地圖上(起、終點圖標用戶可自定義);


公交換乘圖層(TransitOverlay):公交換乘線路圖層,將某一特定地區的公交出行方案的路線及換乘位置顯示在地圖上(起、終點圖標用戶可自定義);


自定義圖層(ItemizedOverlay):可將一個或多個興趣點繪制到地圖上,且支持自定義圖標(支持動態更新Item位置、圖標);


彈出窗圖層(PopupOverlay):在地圖上顯示一個彈出窗口;


幾何圖形繪制圖層(GraphicsOverlay):用於繪制點、折線段、弧線、圓、矩形、多邊形等幾何圖形的圖層;


文字繪制圖層(TextOverlay):用於繪制文字的圖層。


圖片圖層(GroundOverlay):用於展示用戶傳入圖片的圖層。


全景圖圖層(PanoramaOverlay):在全景圖內標繪興趣點,支持自定義圖標樣式。


註:除彈出窗圖層外,其他各個圖層均已實現多實例。全景圖圖層是針對全景圖所使用的特殊圖層。


MapView使用一個List管理覆蓋物,通過向MapView.getOverlays() add或remove上述類或其基類的實例即可向地圖添加或刪除覆蓋物。在更新地圖覆蓋物後,需調用MapView.refresh() 使更新生效。




定位原理


使用網路Android定位SDK必須注冊GPS和網路使用許可權。定位SDK採用GPS、基站、Wi-Fi信號進行定位。當應用程序向定位SDK發起定位請求時,定位SDK會根據應用的定位因素(GPS、基站、Wi-Fi信號)的實際情況(如是否開啟GPS、是否連接網路、是否有信號等)來生成相應定位依據進行定位。

用戶可以設置滿足自身需求的定位依據:

若用戶設置GPS優先,則優先使用GPS進行定位,如果GPS定位未打開或者沒有可用位置信息,且網路連接正常,定位SDK則會返回網路定位(即Wi-Fi與基站)的最優結果。為了使獲得的網路定位結果更加精確,請打開手機的Wi-Fi開關。


下面我們將利用 MyLocationOverlay和 PopupOverlay 這兩個類

一 . 導入庫文件


在使用網路定位SDKv4.0之前,我們要下載最新的庫文件,下載地址:點擊下載相關庫文件,將liblocSDK4.so文件拷貝到libs/armeabi目錄下。將locSDK4.0.jar文件拷貝到工程的libs目錄下

LocationClient 定位SDK的核心類,LocationClient類必須在主線程中聲明。需要Context類型的參數。Context需要時全進程有效的context,推薦用getApplicationConext獲取全進程有效的context,我們調用registerLocationListener(BDLocationListener)方法來注冊定位監聽介面,BDLocationListener裡面有兩個方法,onReceiveLocation()(接收非同步返回的定位結果),onReceivePoi()(接收非同步返回的POI查詢結果,POI是「Point of Interest」的縮寫,可以翻譯成「信息點」,每個POI包含四方面信息,名稱、類別、經度、緯度、附近的酒店、飯店,商鋪等信息。我們可以叫它為「導航地圖信息」,導航地圖數據是整個導航產業的基石),我們這里只需要重寫onReceiveLocation就行了BDLocation 封裝了定位SDK的定位結果,在BDLocationListener的onReceive方法中獲取。通過該類用戶可以獲取error code,位置的坐標,精度半徑,地址等信息,對於其getLocType ()方法獲取的error code一些情況

61 : GPS定位結果62 : 掃描整合定位依據失敗。此時定位結果無效。63 : 網路異常,沒有成功向伺服器發起請求。此時定位結果無效。65 : 定位緩存的結果。66 : 離線定位結果。通過requestOfflineLocaiton調用時對應的返回結果67 : 離線定位失敗。通過requestOfflineLocaiton調用時對應的返回結果68 : 網路連接失敗時,查找本地離線定位時對應的返回結果161: 表示網路定位結果162~167: 服務端定位失敗

LocationClientOption 用來設置定位SDK的定位方式,比如設置打開GPS,設置是否需要地址信息,設置發起定位請求的間隔時間等等,參數設置完後調用LocationClient 的setLocOption方法LocationOverlay MyLocationOverlay的子類,重寫裡面的dispatchTap()方法,顯示彈出窗口圖層PopupOverlay,調用mMapView.getOverlays().add(myLocationOverlay)就將我的位置圖層添加到地圖裡面PopupOverlay 彈出圖層,這個類還是比較簡單,裡面只有三個方法,hidePop() (隱藏彈出圖層)showPopup(Bitmap pop, GeoPoint point, int yOffset) (顯示彈出圖層)和showPopup顯示多張圖片的重載方法,由於showPopup方法只接受Bitmap對象,所以我們必須將我們的彈出圖層View對象轉換成Bitmap對象,我們調用getBitmapFromView方法就實現這一轉換BDLocationListener介面的onReceiveLocation(BDLocation location) 方法我還要重點講解下,我們會發現onReceiveLocation方法會反復執行,他執行的間隔跟LocationClientOption類的setScanSpan()方法設定的值有關,我們設定的是5000毫秒,則onReceiveLocation方法每隔5秒執行一次,注意,當我們設定的值大於1000(ms),定位SDK內部使用定時定位模式。調用requestLocation( )後,每隔設定的時間,定位SDK就會進行一次定位。如果定位SDK根據定位依據發現位置沒有發生變化,就不會發起網路請求,返回上一次定位的結果;如果發現位置改變,就進行網路請求進行定位,得到新的定位結果。如果你只需要定位一次的話,這個設置小於1000,或者不用設置就可以了,定時定位時,調用一次requestLocation,會定時監聽到定位結果 四 . 在運行程序之前,我們還必須在AndroidManifest.xml進行相關配置和許可權的聲明


還有很重要的一點就是在AndroidManifest.xml中添加下面的內容



android:name=com..location.f

android:enabled=true

android:process=:remote >


android:name=com..lbsapi.API_KEY

android:value=6KOX4mXHeBRzgriV6OP1T2Hw

/>


其中的meta-data問題:網上這樣說,大家記住就得了。。。。


因為單獨的定位sdk需要一個key值,而定位sdk的值又不像mapManager中可以直接賦值

所以就需要在注冊表單中注冊

⑵ Android的原生定位API在國內使用是否有很多問題

果斷的用網路地圖API啊
不過你也可用谷歌地圖,就是記得改API把裡面的GMAP地址改成晚上流傳的各種IP,還有就是在軟體內部寫好GPS坐標偏移參數並定期更新

⑶ android百度地圖api怎麼定位

網路的沒試過,google 的試過了,以下源代碼供你參考: Geocoder myGeocoder = new Geocoder(this,Locale.CHINA); List<Address> addressList = addressList = myGeocoder.getFromLocationName(address, 1); 這個getFromLocationName()地址返回經緯度,但在8中貌似不能用...聽說7就可以,我還沒測試過

⑷ android實現定位的方法和API有哪些

1.網路地圖sdk和高德地圖sdk都可以用,各自都有官方文檔和demo,高德沒有接觸過,網路的話需要申請一個key,然後在工程里集成網路地圖的sdk就可以用了,官方有詳細的demo,可以自己去下載看看網路地圖sdk

⑸ 如何使用Android調用百度地圖API

在Android開發中有一個非常重要的應用就是實時定位,通過手機在手機地圖上進行實時定位,定位當前手機的位置,這個功能我們一般都可以用網路地圖或者谷歌地圖的api來實現,這些api代碼要在網路或者谷歌的官網上下載,這里不再多說,本文以代碼實例的方式展示如何使用網路地圖的api,安卓開發者可以直接復制本文示例代碼到項目中進行測試,本文僅僅是使用網路地圖api的核心代碼,如果要使用可能需要進行相關修改,具體參考代碼請參看下文:

1.先來看看java代碼,MainActivity.class參考代碼如下:

1 public class MainActivity extends MapActivity {
2 // 初始位置設置為西安
3 private double userLongitude = 34.341568 * 1E6;// 緯度
4 private double userLatitude = 108.94017499999995 * 1E6;// 經度
5 // 添加網路相關控制項
6 private MapView mapView;
7 private BMapManager bMapManager;// 載入地圖的引擎
8 // 網路地圖上的key值
9 private String keyString = "";
10 // 在網路地圖上添加一些控制項,例如放大、縮小
11 private MapController mapController;
12 private MKLocationManager mLocationManager;
13
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.activity_main);
18 // 實例化控制項
19 mapView = (MapView) this.findViewById(R.id.bmapView);
20 bMapManager = new BMapManager(MainActivity.this);
21 // 必須要載入key
22 bMapManager.init(keyString, new MKGeneralListener() {
23 // key值不正確
24 @Override
25 public void onGetPermissionState(int arg0) {
26 if (arg0 == 300) {
27 Toast.makeText(MainActivity.this, R.string.key_error,Toast.LENGTH_LONG).show();
28 }
29 }
30 //網路出錯
31 @Override
32 public void onGetNetworkState(int arg0) {
33 Toast.makeText(MainActivity.this, R.string.net_error,Toast.LENGTH_LONG).show();
34 }
35 });
36 this.initMapActivity(bMapManager);
37 mapView.setBuiltInZoomControls(true);// 表示可以設置縮放功能
38 mapController = mapView.getController();
39 // 初始化Location模塊
40 mLocationManager = bMapManager.getLocationManager();
41 // 通過enableProvider和disableProvider方法,選擇定位的Provider
42 mLocationManager.enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);
43 mLocationManager.disableProvider(MKLocationManager.MK_GPS_PROVIDER);
44 //返回手機位置
45 mLocationManager.requestLocationUpdates(locationListener);
46 mLocationManager.setNotifyInternal(5, 2);
47 // 添加定點陣圖層
48 MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this,mapView);
49 myLocationOverlay.enableMyLocation(); // 啟用定位
50 myLocationOverlay.enableCompass(); // 啟用指南針
51 mapView.getOverlays().add(myLocationOverlay);
52 mapView.setTraffic(true);// 交通地圖
53 // mapView.setSatellite(true);// 衛星地圖
54 mapController.setZoom(15);// 設置縮放級別
55 mapView.invalidate();// 刷新地圖
56 }
57 //獲取經度緯度
58 private LocationListener locationListener = new LocationListener() {
59 @Override
60 public void onLocationChanged(Location location) {
61 if (location != null) {
62 userLatitude = location.getLatitude() * 1E6;
63 userLongitude = location.getLongitude() * 1E6;
64 GeoPoint mypoint = new GeoPoint((int)(userLatitude), (int)(userLongitude));
65 mapView.getController().animateTo(mypoint);
66 }
67 }
68 };
69 // 銷毀
70 @Override
71 protected void onDestroy() {
72 super.onDestroy();
73 if (bMapManager != null) {
74 bMapManager.destroy();
75 bMapManager = null;
76 }
77 }
78 // 停止
79 @Override
80 protected void onPause() {
81 super.onPause();
82 if (bMapManager != null) {
83 mLocationManager.removeUpdates(locationListener);
84 bMapManager.stop();
85 }
86 }
87 // 重啟
88 @Override
89 protected void onResume() {
90 super.onResume();
91 if (bMapManager != null) {
92 bMapManager.start();
93 }
94 }
95 //
96 @Override
97 protected boolean isRouteDisplayed() {
98 return false;
99 }
100
101
102 // Menu
103 // 當點擊Menu按鈕時,調用該方法
104 @Override
105 public boolean onCreateOptionsMenu(Menu menu) {
106 menu.add(0, 1, 1, R.string.exit).setIcon(
107 android.R.drawable.ic_menu_close_clear_cancel);
108 return super.onCreateOptionsMenu(menu);
109 }
110 @Override
111 public boolean onContextItemSelected(MenuItem item) { // 選中某個菜單項
112 if (item.getItemId() == 1) {
113 MainActivity.this.finish();
114 }
115 return super.onOptionsItemSelected(item);
116 }
117 // 返回鍵
118 @Override
119 public boolean onKeyDown(int keyCode, KeyEvent event) {
120 if (keyCode == KeyEvent.KEYCODE_BACK) {
121 finish();
122 }
123 return super.onKeyDown(keyCode, event);
124 }
125 }
126
2.布局文件,主要是添加顯示地圖的控制項,activity_mainmain.xml參考代碼如下:

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent" >
5 <!-- 添加顯示網路地圖的控制項 -->
6 <com..mapapi.MapView
7 android:id="@+id/bmapView"
8 android:layout_width="fill_parent"
9 android:layout_height="fill_parent"
10 android:clickable="true"
11 tools:context=".MainActivity" />
12 </LinearLayout>
3.設置配置文件,AndroidManifest.xml參考代碼如下:

1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 package="yu.hong.map"
3 android:versionCode="1"
4 android:versionName="1.0" >
5 <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="15" />
6 <!--添加網路地圖開發授權 -->
7 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
8 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
9 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
10 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
11 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
12 <uses-permission android:name="android.permission.INTERNET" />
13 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
14 <!--添加對屏幕的支持 -->
15 <supports-screens
16 android:anyDensity="true"
17 android:largeScreens="true"
18 android:normalScreens="true"
19 android:resizeable="true"
20 android:smallScreens="true" />
21 <application
22 android:icon="@drawable/ic_maplauncher"
23 android:label="@string/app_name"
24 android:theme="@style/AppTheme" >
25 <activity
26 android:name=".MainActivity"
27 android:label="@string/title_activity_main" >
28 <intent-filter>
29 <action android:name="android.intent.action.MAIN" />
30 <category android:name="android.intent.category.LAUNCHER" />
31 </intent-filter>
32 </activity>
33 </application>
34 </manifest>

⑹ android 百度地圖api定位不準確

不是很了解高德地圖是不是把位置獲取的函數自己封裝起了了哦。
這樣的話,自己提前獲取可能只是做了些無用功而已哦。

不過你還是可以嘗試一下啊。啟動的時候嘗試獲取一下位置就好了。
直接在代碼裡面
new Thead(){
public void run(){
//寫你的獲取位置代碼
}
}.start();
就可以哦。

⑺ Android定位開發,API版本為23,提示沒有許可權

源碼中被用來檢查和請求許可權的方法分別是Activity的checkSelfPermission和requestPermissions。這些方法api23引入,如下代碼:
private static final String TAG = "Contacts";
private void insertDummyContact() {
// Two operations are needed to insert a new contact.
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(2);

// First, set up a new raw contact.
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null);
operations.add(op.build());

// Next, set the name for the contact.
op = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
"__DUMMY CONTACT from runtime permissions sample");
operations.add(op.build());

// Apply the operations.
ContentResolver resolver = getContentResolver();
try {
resolver.applyBatch(ContactsContract.AUTHORITY, operations);
} catch (RemoteException e) {
Log.d(TAG, "Could not add a new contact: " + e.getMessage());
} catch (OperationApplicationException e) {
Log.d(TAG, "Could not add a new contact: " + e.getMessage());
}
}

⑻ android 使用百度api怎麼快速定位

在下載頁面下載最新的庫文件。將liblocSDK2.4.so文件拷貝到libs/armeabi目錄下。將locSDK2.4.jar文件拷貝到工程根目錄下,並在工程屬性->Java Build Path->Libraries中選擇「Add JARs」,選定locSDK2.4.jar,確定後返回。這樣您就可以在程序中使用網路定位API了。

設置AndroidManifest.xml
為區分2.3版本service,需要將manifest file中的 intent filter聲明為com..location.service_v2.4 在application標簽中聲明service組件

<service android:name="com..location.f" android:enabled="true" android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE"> <intent-filter> <action android:name="com..location.service_v2.4"></action> </intent-filter></service>聲明使用許可權

<permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission><uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission><uses-permission android:name="android.permission.READ_LOGS"></uses-permission>import相關類

import com..location.BDLocation;import com..location.BDLocationListener;import com..location.LocationClient;import com..location.LocationClientOption;import com..location.BDNotifyListener;//假如用到位置提醒功能,需要import該類功能類的使用
初始化LocationClient類
此處需要注意:LocationClient類必須在主線程中聲明。需要Context類型的參數。

public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener(); public void onCreate() { mLocationClient = new LocationClient(this); //聲明LocationClient類 mLocationClient.registerLocationListener( myListener ); //注冊監聽函數}實現BDLocationListener介面
BDLocationListener介面有2個方法需要實現:
1.接收非同步返回的定位結果,參數是BDLocation類型參數。
2.接收非同步返回的POI查詢結果,參數是BDLocation類型參數。

public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) return ; StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime()); sb.append("\nerror code : "); sb.append(location.getLocType()); sb.append("\nlatitude : "); sb.append(location.getLatitude()); sb.append("\nlontitude : "); sb.append(location.getLongitude()); sb.append("\nradius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation){ sb.append("\nspeed : "); sb.append(location.getSpeed()); sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){ sb.append("\naddr : "); sb.append(location.getAddrStr()); } logMsg(sb.toString()); }public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null){ return ; } StringBuffer sb = new StringBuffer(256); sb.append("Poi time : "); sb.append(poiLocation.getTime()); sb.append("\nerror code : "); sb.append(poiLocation.getLocType()); sb.append("\nlatitude : "); sb.append(poiLocation.getLatitude()); sb.append("\nlontitude : "); sb.append(poiLocation.getLongitude()); sb.append("\nradius : "); sb.append(poiLocation.getRadius()); if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){ sb.append("\naddr : "); sb.append(poiLocation.getAddrStr()); } if(poiLocation.hasPoi()){ sb.append("\nPoi:"); sb.append(poiLocation.getPoi()); }else{ sb.append("noPoi information"); } logMsg(sb.toString()); }}設置參數
設置定位參數包括:定位模式(單次定位,定時定位),返回坐標類型,是否打開GPS等等。eg:

LocationClientOption option = new LocationClientOption();option.setOpenGps(true);option.setAddrType("detail");option.setCoorType("gcj02");option.setScanSpan(5000);option.disableCache(true);//禁止啟用緩存定位option.setPoiNumber(5); //最多返回POI個數 option.setPoiDistance(1000); //poi查詢距離 option.setPoiExtraInfo(true); //是否需要POI的電話和地址等詳細信息 mLocClient.setLocOption(option);發起定位請求
發起定位請求。請求過程是非同步的,定位結果在上面的監聽函數onReceiveLocation中獲取。

if (mLocClient != null && mLocClient.isStarted()) mLocClient.requestLocation();else Log.d("LocSDK_2.0_Demo1", "locClient is null or not started");發起POI查詢請求
發起POI查詢請求。請求過程是非同步的,定位結果在上面的監聽函數onReceivePoi中獲取。

if (mLocClient != null && mLocClient.isStarted()) mLocClient.requestPoi();位置提醒使用
位置提醒最多提醒3次,3次過後將不再提醒。 假如需要再次提醒,或者要修改提醒點坐標,都可通過函數SetNotifyLocation()來實現。

//位置提醒相關代碼mNotifyer = new NotifyLister();mNotifyer.SetNotifyLocation(42.03249652949337,113.3129895882556,3000,"gps");//4個參數代表要位置提醒的點的坐標,具體含義依次為:緯度,經度,距離范圍,坐標系類型(gcj02,gps,bd09,bd09ll)mLocationClient.registerNotify(mNotifyer);//注冊位置提醒監聽事件後,可以通過SetNotifyLocation 來修改位置提醒設置,修改後立刻生效。
//BDNotifyListner實現public class NotifyLister extends BDNotifyListener{ public void onNotify(BDLocation mlocation, float distance){ mVibrator01.vibrate(1000);//振動提醒已到設定位置附近 }}
//取消位置提醒mLocationClient.removeNotifyEvent(mNotifyer);

熱點內容
python編譯為dll 發布:2025-08-14 15:43:40 瀏覽:788
機變酷卡編程 發布:2025-08-14 15:25:54 瀏覽:881
ftp亂碼上傳 發布:2025-08-14 15:25:52 瀏覽:728
sqlserver2008數據類型 發布:2025-08-14 15:25:03 瀏覽:718
魂斗羅歸來解壓縮 發布:2025-08-14 15:17:00 瀏覽:862
農村存儲 發布:2025-08-14 15:16:49 瀏覽:300
windows之間使用ftp傳輸 發布:2025-08-14 15:16:01 瀏覽:371
c語言寫的俄羅斯方塊 發布:2025-08-14 15:13:01 瀏覽:886
安卓怎麼跟別人合拍唱歌有自己聲音 發布:2025-08-14 14:57:41 瀏覽:984
java在線培訓系統 發布:2025-08-14 14:56:03 瀏覽:646