1.注册appkey,下载相关包,把jar文件放入libs文件夹,把其他文件夹放入main/jniLibs下
2.manifest中声明权限,增加<meta-data />和<service>标签内容
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="rpMB29dvc4O1GBG3ypmlVmQ9oZBdIDKb" />
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" />
3. 使用百度定位:
public class MainActivity extends AppCompatActivity { public LocationClient mLocationClient; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(new MyLocationListener()); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.text_view); List<String> per = new ArrayList<>(); if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ per.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){ per.add(Manifest.permission.ACCESS_COARSE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED){ per.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){ per.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!per.isEmpty()){ String[] permissions = per.toArray(new String[per.size()]); ActivityCompat.requestPermissions(MainActivity.this,permissions,1); } else requestLocation(); } private void requestLocation(){ initLocatioin(); mLocationClient.start(); } private void initLocatioin(){ LocationClientOption option = new LocationClientOption(); option.setScanSpan(5000); mLocationClient.setLocOption(option); option.setCoorType("bd09ll"); } public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location.getLocType() == BDLocation.TypeGpsLocation || location.getLocType() == BDLocation.TypeNetWorkLocation) { mTextView.setText("haha"); } } } public void onRequestPermissionResult(int requestCode,String[] permissions,int[] grantResults){ switch (requestCode) { case 1: if (grantResults.length > 0) { for (int result:grantResults) { if (result != PackageManager.PERMISSION_GRANTED){ Toast.makeText(this,"必须同意权限才能使用",Toast.LENGTH_LONG).show(); finish(); return; } } requestLocation(); } else { Toast.makeText(this,"wrong",Toast.LENGTH_LONG).show(); finish(); } break; default: } } }
4.显示地图
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(new MyLocationListener()); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.bmapView);
@Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mLocationClient.stop(); mapView.onDestroy();; }
5.移动到当前位置
private BaiduMap baiduMap;
baiduMap = mapView.getMap();
private void navigateTo(BDLocation location){ LatLng ll = new LatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll); baiduMap.animateMapStatus(update); } } public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location.getLocType() == BDLocation.TypeGpsLocation || location.getLocType() == BDLocation.TypeNetWorkLocation) { navigateTo(location); } } }
6.显示当前位置点
baiduMap.setMyLocationEnabled(true);
private void navigateTo(BDLocation location){ LatLng ll = new LatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll); baiduMap.animateMapStatus(update); MyLocationData.Builder locationBuilder = new MyLocationData.Builder(); locationBuilder.latitude(location.getLatitude()); locationBuilder.longitude(location.getLongitude()); MyLocationData locationData = locationBuilder.build(); baiduMap.setMyLocationData(locationData);