A. android使用高德定位sdk獲取的城市名稱怎樣讓其他的界面進行調用
第一步,我們需要下載SDK
第二步,解壓後,將jar包放進libs文件夾中,並加入環境變數中。
第三步,在AndroidManifest.xml文件中配置許可權:
<!--用於進行網路定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--用於訪問GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--用於獲取運營商信息,用於支持提供運營商信息相關的介面-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--用於訪問wifi網路信息,wifi信息會用於進行網路定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--用於獲取wifi的獲取許可權,wifi信息會用來進行網路定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--用於訪問網路,網路定位需要上網-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--用於讀取手機當前的狀態-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--用於寫入緩存數據到擴展存儲卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--用於申請調用A-GPS模塊-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
並在application標簽中添加:
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你申請的key" />
<service android:name="com.amap.api.location.APSService" />
第四步,測試代碼:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
public class MainActivity extends AppCompatActivity {
//聲明AMapLocationClient類對象
public AMapLocationClient mLocationClient = null;
//聲明定位回調監聽器
public AMapLocationListener mLocationListener = new MyAMapLocationListener();
//聲明AMapLocationClientOption對象
public AMapLocationClientOption mLocationOption = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//設置定位回調監聽
mLocationClient.setLocationListener(mLocationListener);
//初始化AMapLocationClientOption對象
mLocationOption = new AMapLocationClientOption();
//設置定位模式為AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//獲取一次定位結果:
//該方法默認為false。
mLocationOption.setOnceLocation(false);
//獲取最近3s內精度最高的一次定位結果:
//設置setOnceLocationLatest(boolean b)介面為true,啟動定位時SDK會返回最近3s內精度最高的一次定位結果。如果設置其為true,setOnceLocation(boolean b)介面也會被設置為true,反之不會,默認為false。
mLocationOption.setOnceLocationLatest(true);
//設置是否返回地址信息(默認返回地址信息)
mLocationOption.setNeedAddress(true);
//設置是否允許模擬位置,默認為false,不允許模擬位置
mLocationOption.setMockEnable(false);
//關閉緩存機制
mLocationOption.setLocationCacheEnable(false);
//給定位客戶端對象設置定位參數
mLocationClient.setLocationOption(mLocationOption);
//啟動定位
mLocationClient.startLocation();
}
private class MyAMapLocationListener implements AMapLocationListener {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
Log.e("位置:", aMapLocation.getAddress());
} else {
//定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
}
}
}
B. android開發如何用高德地圖進行模擬定位.
一、 要實現高德地圖定位呢,首先需要做好以下幾步准備:
1. 在高德開放平台注冊帳號
2. 在開發中下載Android平台下的地圖SDK和定位SDK文件
進入相關下載下載自己想要的功能或文件,圖只是截取了地圖SDK的頁面,定位SDK也是一樣,按自己想要的文件下載。下載完成後解壓得到:
- 3D地圖包解壓後得到:3D地圖顯示包「AMap_3DMap_VX.X.X_時間.jar」和庫文件夾(包含armeabi、arm64-v8a等庫文件)。
- 2D地圖包解壓後得到:2D地圖顯示包「AMap_2DMap_VX.X.X_時間.jar 」
- 定位SDK下載並解壓得到定位包「AMap_Location_V2.x.x.jar「
3. 添加jar包,將jar包放入工程的libs目錄下。
對於每個jar文件,右鍵-選擇Add As Library,導入到工程中。或者使用菜單欄 選擇 File ->Project Structure->Moles-> Dependencies。點擊綠色的加號選擇File dependency. 然後選擇要添加的jar包即可,此時build.gradle中會自動生成如下信息。
創建自己的應用(創建過程內需要的SHA1已經的博客講過)
開發環境已經配置好了,接下來就是敲代碼了。
二、 首先我們要做的就是將地圖顯示出來,通過以下幾步操作,即可在應用中使用高德地圖SDK:
第一步:添加用戶key 在工程的「 AndroidManifest.xml 」文件如下代碼中添加您的用戶 Key。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="" />123456789
第二步:添加所需許可權 在工程的「 AndroidManifest.xml 」文件中進行添加。
//地圖包、搜索包需要的基礎許可權
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
//定位包、導航包需要的額外許可權(註:基礎許可權也需要)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />1234567891011121314
第三步:在布局xml文件中添加地圖控制項。
<com.amap.api.maps2d.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />1234
第四步,創建地圖Activity,管理地圖生命周期。
public class MainActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取地圖控制項引用
mMapView = (MapView) findViewById(R.id.map_view);
//在activity執行onCreate時執行mMapView.o
mMapView.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity執行onResume時執行mMapView.onResume (),實現地圖生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity執行onPause時執行mMapView.onPause (),實現地圖生命周期管理
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),實現地圖生命周期管理
mMapView.onSaveInstanceState(outState);
}
}
注意:一定要有mMapView.onCreate(savedInstanceState);
第二步:啟動定位功能:
1. 在主線程中獲得地圖對象AMap,並設置定位監聽且實現LocationSource介面:
public class MainActivity extends Activity implements LocationSource{1
if (aMap == null) {
aMap = mMapView.getMap();
//設置顯示定位按鈕 並且可以點擊
UiSettings settings = aMap.getUiSettings();
aMap.setLocationSource(this);//設置了定位的監聽,這里要實現LocationSource介面
// 是否顯示定位按鈕
settings.setMyLocationButtonEnabled(true);
aMap.setMyLocationEnabled(true);//顯示定位層並且可以觸發定位,默認是flase
}123456789
2. 配置定位參數,啟動定位
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//設置定位回調監聽,這里要實現AMapLocationListener介面,AMapLocationListener介面只有onLocationChanged方法可以實現,用於接收非同步返回的定位結果,參數是AMapLocation類型。
mLocationClient.setLocationListener(this);
//初始化定位參數
mLocationOption = new AMapLocationClientOption();
//設置定位模式為Hight_Accuracy高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅設備模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//設置是否返回地址信息(默認返回地址信息)
mLocationOption.setNeedAddress(true);
//設置是否只定位一次,默認為false
mLocationOption.setOnceLocation(false);
//設置是否強制刷新WIFI,默認為強制刷新
mLocationOption.setWifiActiveScan(true);
//設置是否允許模擬位置,默認為false,不允許模擬位置
mLocationOption.setMockEnable(false);
//設置定位間隔,單位毫秒,默認為2000ms
mLocationOption.setInterval(2000);
//給定位客戶端對象設置定位參數
mLocationClient.setLocationOption(mLocationOption);
//啟動定位
mLocationClient.startLocation();
高精度定位模式:
在這種定位模式下,將同時使用高德網路定位和GPS定位,優先返回精度高的定位
低功耗定位模式:
在這種模式下,將只使用高德網路定位
僅設備定位模式:
在這種模式下,將只使用GPS定位。
3. 實現AMapLocationListener介面,獲取定位結果:
public class MainActivity extends Activity implem
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//定位成功回調信息,設置相關消息
aMapLocation.getLocationType();//獲取當前定位結果來源,如網路定位結果,詳見官方定位類型表
aMapLocation.getLatitude();//獲取緯度
aMapLocation.getLongitude();//獲取經度
aMapLocation.getAccuracy();//獲取精度信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);//定位時間
aMapLocation.getAddress();//地址,如果option中設置isNeedAddress為false,則沒有此結果,網路定位結果中會有地址信息,GPS定位不返回地址信息。
aMapLocation.getCountry();//國家信息
aMapLocation.getProvince();//省信息
aMapLocation.getCity();//城市信息
aMapLocation.getDistrict();//城區信息
aMapLocation.getStreet();//街道信息
aMapLocation.getStreetNum();//街道門牌號信息
aMapLocation.getCityCode();//城市編碼
aMapLocation.getAdCode();//地區編碼
// 如果不設置標志位,此時再拖動地圖時,它會不斷將地圖移動到當前的位置
if (isFirstLoc) {
//設置縮放級別
aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
//將地圖移動到定位點
aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
//點擊定位按鈕 能夠將地圖的中心移動到定位點
mListener.onLocationChanged(aMapLocation);
//獲取定位信息
StringBuffer buffer = new StringBuffer();
buffer.append(aMapLocation.getCountry() + ""
+ aMapLocation.getProvince() + ""
+ aMapLocation.getCity() + ""
+ aMapLocation.getProvince()
+ aMapLocation.getDistrict() + ""
+ aMapLocation.getStreet() + ""
+ aMapLocation.getStreetNum());
Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
isFirstLoc = false;
}
} else {
//顯示錯誤信息ErrCode是錯誤碼,errInfo是錯誤信息,詳見錯誤碼表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
Toast.makeText(getApplicationContext(), "定位失敗", Toast.LENGTH_LONG).show();
}
}
}3839404142434445464748495051
4.關於停止定位
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
//mLocationClient.stopLocation();//停止定位
mLocationClient.onDestroy();//銷毀定位客戶端。
//銷毀定位客戶端之後,若要重新開啟定位請重新New一個AMapLocationClient對象。
}
//激活定位
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
}
@Override
public void deactivate() {
mListener = null;
}12345678910111213141516171819
C. 怎麼在android百度地圖通過經緯度來定位並且顯示出地圖位置
在onLocationChanged方法里獲得自己當前的坐標然後方法里寫mSearch.reverseGeocode(newGeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6)));然後再通過代碼實行這個方法功能{publicvoidonGetAddrResult(MKAddrInforesult,interror){MKGeocoderAddressComponentkk=result.addressComponents;Stringcity=kk.city;}}city就是你所在城市
D. 手機怎麼定位在別的城市
1、首先拉開手機的通知欄,找到這個定位服務,把它打開。
E. 安卓手機修改定位方法
具體方法如下:
1、首先在手機的軟體商店中搜索一下虛擬定位,找到下面如圖所示的軟體下載安裝。如圖所示。
F. 安卓開發:如何定位城市用於天氣預報
(1)修改新建項目的reslayout目錄下的布局文件main.xml,將默認添加的Text View組件刪除,然後添加一個水平線性布局管理器和一個用於顯示網頁的Web View級件,並在該布局管理器中添加『北京「按鈕、」上海「按鈕、」哈爾濱「按鈕、」長春「按鈕、」沈陽「按鈕和」廣州「按鈕,具體代碼請參見光碟。
(2)在MainActivity中,聲明一個Web View組件的對象webView,具體代碼如下:
G. 安卓手機怎麼修改定位城市
安卓手機怎麼修改城市定位?安卓手機系統,你只要把你的定位系統打開,它自動就會識別你所在的城市。
H. android如何獲取地理位置
三種方式進行定位,獲取用戶位置,分別是基於基站定位, 網路定位,GPS定位。
1.基站定位(passive):這是基於網路基站進行定位的,定位的精確度在幾十米到幾千米不等,在城市中基站覆蓋率比較高,推薦使用基站定位,如果是在郊區,基站相距較遠,基站的覆蓋沒有城裡好,定位的誤差比較大。如果在郊區不推薦使用基站定位。
2.網路定位:wifi定位,網路定位
3.GPS定位:與衛星進行通信。手機中嵌入了GPS模塊(精簡版的A-GPS),通過A-GPS搜索衛星, 獲取經緯度。使用GPS的弊端是:必須站在空曠的地方,頭頂對著天空,如果雲層厚了,也會受到一定的影響。精確度:10-50米
擴展知識:
使用Android是定位必備的許可權:
< uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION " /> //精確定位
<uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" /> //模擬器
<uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" /> //粗糙定位
//獲取定位管理對象
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[] names=lm.getAllProviders();//獲取所有的位置提供者,一般三種
Criteria criteria=new Criteria();//查詢條件,如果設置了海拔,則定位方式只能是GPS;
criteria.setCostAllowed(true);//是否產生開銷,比如流量費
String provider=lm.getBaseProvider(criteria,true)//獲取最好的位置提供者,第二個參數為true,表示只獲取那些被打開的位置提供者
lm.requestLocationUpdates(provier,0,0,new LocationListener(){});//獲取位置。第二個參數表示每隔多少時間返回一次數據,第三個參數表示被定位的物體移動每次多少米返回一次數據。
private class MyLocationListener implements LocationListener {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
@Override
public void onLocationChanged(Location location) {
System. out.println( "服務中位置監聽發送了變化了" );
float accuracy = location.getAccuracy(); // 精確度
double altitude = location.getAltitude(); // 海拔
double latitude = location.getLatitude(); // 緯度
double longitude = location.getLongitude(); // 經度
String locationInfo = "jing:" + longitude + ",wei:" + latitude + ",haiba:" + altitude + ",jingque:" + accuracy;
Editor edit = sp.edit();
edit.putString( "location", locationInfo);
edit.commit();
}
} public void onProviderDisabled(String provider) {
}
I. android 版百度地圖如何通過定位功能獲得當前的位置所在的城市
網路地圖是通過移動通信基站定位來確定當前位置所在的城市。其原理就是通過測算周圍基站與手機的距離來交會估算手機的空間位置。
手機定位是指通過特定的定位技術來獲取移動手機或終端用戶的位置信息(經緯度坐標),在電子地圖上標出被定位對象的位置的技術或服務。定位技術有兩種,一種是基於GPS的定位,一種是基於移動運營網的基站的定位。基於GPS的定位方式是利用手機上的GPS定位模塊將自己的位置信號發送到定位後台來實現手機定位的。基站定位則是利用基站對手機的距離的測算距離來確定手機位置的。後者不需要手機具有GPS定位能力,但是精度很大程度依賴於基站的分布及覆蓋范圍的大小,有時誤差會超過一公里。前者定位精度較高。此外還有利用Wifi在小范圍內定位的方式。