AndroidManifest.xml:
1.
<!-- 這個權限用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 這個權限用於訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <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" /> <!-- SD卡讀取權限,用戶寫入離線定位數據--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
2:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="8wfXa6BpqnKNwhYeBrIwZ3h5NRH4X2Ro" /> <!--value是百度申請的AK-->
build.gradle:
1:
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
添加jar包與lib四個文件!!
public class MainActivity extends AppCompatActivity { private Button btnLocation; // 百度地圖控件 private MapView mMapView = null; // 百度地圖對象 private BaiduMap mBaiduMap; // 是否首次定位 boolean isFirstLocation = true; // 定位相關 LocationClient mLocationClient; private String path; public MyLocationListenner myListener = new MyLocationListenner(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各組件之前初始化context信息,傳入ApplicationContext //注意該方法要再setContentView方法之前實現 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); initView(); setListener(); } private void setListener() { btnLocation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 開啓定位圖層 mBaiduMap.setMyLocationEnabled(true); // 定位初始化 mLocationClient = new LocationClient(MainActivity.this); mLocationClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); //設置獲得地址位置 option.setIsNeedAddress(true); //設置獲得poi option.setIsNeedLocationPoiList(true); // 打開gps option.setOpenGps(true); // 設置座標類型 option.setCoorType("bd09ll"); option.setScanSpan(1000); mLocationClient.setLocOption(option); mLocationClient.start(); } }); } private void initView() { btnLocation = (Button) findViewById(R.id.btnLocation); //獲取地圖控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); //普通地圖 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //設置熱力圖 //mBaiduMap.setBaiduHeatMapEnabled(true); //設置交通圖 mBaiduMap.setTrafficEnabled(true); } @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(); } /** * 定位SDK監聽函數 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { String str = "定位的信息:"+location.getAddress().address+",緯度:"+location.getLatitude(); //Toast.makeText(MainActivity.this,"緯度:"+location.getLatitude()+"經度"+location.getLongitude(),Toast.LENGTH_LONG).show(); List list = location.getPoiList(); str += ",poi數量:"+list.size()+",第一個:"+((Poi)(list.get(0))).getName(); path = location.getAddress().address; Log.e("=====", str); // map view 銷燬後不在處理新接收的位置 if (location == null || mMapView == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此處設置開發者獲取到的方向信息,順時針0-360 .direction(5).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if (isFirstLocation) { isFirstLocation = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } @Override public void onConnectHotSpotMessage(String str, int i) { } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.baidumap.MainActivity"> <Button android:id="@+id/btnLocation" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="定位"/> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> </LinearLayout>