private void init_position_map ( ) {
MyPositioning myPositioning= new MyPositioning ( ) ;
mBaiduMap. setMyLocationConfiguration ( myPositioning. locationConfig ( ) ) ;
MyLocationListener myListener = new MyLocationListener ( ) ;
mLocationClient= myPositioning. initLBS ( mLocationClient, myListener) ;
mLocationClient. start ( ) ;
mBaiduMap. setMyLocationEnabled ( true ) ;
}
public MainActivity ( ) {
mainActivity = this ;
}
public static MainActivity getMainActivity ( ) {
return mainActivity;
}
package com. example. administrator. test_map;
import android. Manifest;
import android. content. IntentFilter;
import android. content. pm. PackageManager;
import android. graphics. Color;
import android. graphics. Typeface;
import android. os. Build;
import android. support. annotation. NonNull;
import android. support. v4. app. ActivityCompat;
import android. support. v4. content. ContextCompat;
import android. support. v7. app. AppCompatActivity;
import android. os. Bundle;
import android. util. Log;
import android. view. View;
import android. view. ViewGroup;
import android. widget. Button;
import android. widget. TextView;
import android. widget. Toast;
import com. baidu. location. BDAbstractLocationListener;
import com. baidu. location. BDLocation;
import com. baidu. location. LocationClient;
import com. baidu. location. LocationClientOption;
import com. baidu. mapapi. SDKInitializer;
import com. baidu. mapapi. map. BaiduMap;
import com. baidu. mapapi. map. BitmapDescriptor;
import com. baidu. mapapi. map. BitmapDescriptorFactory;
import com. baidu. mapapi. map. CircleOptions;
import com. baidu. mapapi. map. MapPoi;
import com. baidu. mapapi. map. MapStatusUpdate;
import com. baidu. mapapi. map. MapStatusUpdateFactory;
import com. baidu. mapapi. map. MapView;
import com. baidu. mapapi. map. MapViewLayoutParams;
import com. baidu. mapapi. map. Marker;
import com. baidu. mapapi. map. MarkerOptions;
import com. baidu. mapapi. map. MyLocationConfiguration;
import com. baidu. mapapi. map. MyLocationData;
import com. baidu. mapapi. map. Stroke;
import com. baidu. mapapi. map. TextOptions;
import com. baidu. mapapi. map. offline. MKOfflineMapListener;
import com. baidu. mapapi. model. LatLng;
import com. baidu. mapapi. search. core. SearchResult;
import com. baidu. mapapi. search. geocode. GeoCodeOption;
import com. baidu. mapapi. search. geocode. GeoCodeResult;
import com. baidu. mapapi. search. geocode. GeoCoder;
import com. baidu. mapapi. search. geocode. OnGetGeoCoderResultListener;
import com. baidu. mapapi. search. geocode. ReverseGeoCodeResult;
public class MainActivity extends AppCompatActivity {
private static MainActivity mainActivity;
private MapView mMapView = null;
public BaiduMap mBaiduMap = null;
private MKOfflineMapListener listener = null;
public LocationClient mLocationClient;
private BitmapDescriptor geo;
public LatLng my_now_latLng = new LatLng ( 0.0 , 0.0 ) ;
private View pop;
private TextView title;
private BaiduMap baiduMap;
private GeoCoder mSearch = null;
private Button mButtonOne;
private Button mButtonTwo;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
onTakePhoto ( ) ;
mMapView = ( MapView) findViewById ( R. id. bmapView) ;
mBaiduMap = mMapView. getMap ( ) ;
get_main_map ( ) ;
map_onclick_sinple ( ) ;
init ( ) ;
init_position_map ( ) ;
mSearch = GeoCoder. newInstance ( ) ;
mSearch. setOnGetGeoCodeResultListener ( new OnGetGeoCoderResultListener ( ) {
@Override
public void onGetGeoCodeResult ( GeoCodeResult geoCodeResult) {
if ( geoCodeResult == null || geoCodeResult. error != SearchResult. ERRORNO. NO_ERROR) {
Toast. makeText ( MainActivity. this , "抱歉,未能找到结果" , Toast. LENGTH_LONG)
. show ( ) ;
return ;
}
mBaiduMap. addOverlay ( new MarkerOptions ( ) . position ( geoCodeResult. getLocation ( ) )
. icon ( BitmapDescriptorFactory
. fromResource ( R. mipmap. icon_mark) ) ) ;
mBaiduMap. setMapStatus ( MapStatusUpdateFactory. newLatLng ( geoCodeResult
. getLocation ( ) ) ) ;
String strInfo = String. format ( "纬度:%f 经度:%f" ,
geoCodeResult. getLocation ( ) . latitude, geoCodeResult. getLocation ( ) . longitude) ;
Log. d ( "data" , strInfo) ;
Toast. makeText ( MainActivity. this , strInfo, Toast. LENGTH_LONG) . show ( ) ;
}
@Override
public void onGetReverseGeoCodeResult ( ReverseGeoCodeResult reverseGeoCodeResult) {
}
} ) ;
mButtonOne = ( Button) findViewById ( R. id. button_one) ;
mButtonTwo = ( Button) findViewById ( R. id. button_two) ;
Toast. makeText ( MainActivity. this , "现在我的位置" + my_now_latLng, Toast. LENGTH_LONG) . show ( ) ;
}
public BaiduMap get_main_map ( ) {
return mBaiduMap;
}
private void init_position_map ( ) {
MyPositioning myPositioning= new MyPositioning ( ) ;
mBaiduMap. setMyLocationConfiguration ( myPositioning. locationConfig ( ) ) ;
MyLocationListener myListener = new MyLocationListener ( ) ;
mLocationClient= myPositioning. initLBS ( mLocationClient, myListener) ;
mLocationClient. start ( ) ;
mBaiduMap. setMyLocationEnabled ( true ) ;
}
public MainActivity ( ) {
mainActivity = this ;
}
public static MainActivity getMainActivity ( ) {
return mainActivity;
}
@Override
public void onRequestPermissionsResult ( int requestCode, @NonNull String[ ] permissions, @NonNull int [ ] grantResults) {
super . onRequestPermissionsResult ( requestCode, permissions, grantResults) ;
if ( requestCode == 123 ) {
if ( grantResults[ 0 ] == PackageManager. PERMISSION_GRANTED) {
Toast. makeText ( this , "权限申请成功" , Toast. LENGTH_SHORT) . show ( ) ;
} else if ( grantResults[ 0 ] == PackageManager. PERMISSION_DENIED) {
}
}
}
public void onTakePhoto ( ) {
if ( Build. VERSION. SDK_INT >= 23 ) {
ActivityCompat EasyPermissions = null;
EasyPermissions. requestPermissions ( MainActivity. this , new String [ ] {
Manifest. permission. READ_CONTACTS,
Manifest. permission. RECEIVE_SMS,
Manifest. permission. WRITE_CONTACTS,
Manifest. permission. CAMERA,
Manifest. permission. ACCESS_COARSE_LOCATION,
Manifest. permission. ACCESS_WIFI_STATE,
Manifest. permission. ACCESS_NETWORK_STATE,
Manifest. permission. CHANGE_WIFI_STATE,
Manifest. permission. ACCESS_FINE_LOCATION,
Manifest. permission. READ_PHONE_STATE,
Manifest. permission. WRITE_EXTERNAL_STORAGE,
Manifest. permission. INTERNET,
Manifest. permission. WAKE_LOCK,
Manifest. permission. READ_EXTERNAL_STORAGE} , 123
) ;
int request = ContextCompat. checkSelfPermission ( this , Manifest. permission. ACCESS_COARSE_LOCATION) ;
if ( request != PackageManager. PERMISSION_GRANTED)
{
ActivityCompat. requestPermissions ( this , new String [ ] { Manifest. permission. ACCESS_COARSE_LOCATION} , 123 ) ;
return ;
} else {
Toast. makeText ( this , "定位权限同意" , Toast. LENGTH_SHORT) . show ( ) ;
}
} else {
}
}
private void map_onclick_sinple ( ) {
BaiduMap. OnMapClickListener listener2 = new BaiduMap. OnMapClickListener ( ) {
@Override
public void onMapClick ( LatLng latLng) {
drawCircle ( latLng) ;
Toast. makeText ( getApplicationContext ( ) , "点击事件:" + latLng, Toast. LENGTH_LONG) . show ( ) ;
}
@Override
public void onMapPoiClick ( MapPoi mapPoi) {
}
} ;
mBaiduMap. setOnMapClickListener ( listener2) ;
mBaiduMap. setOnMarkerClickListener ( new BaiduMap. OnMarkerClickListener ( ) {
@Override
public boolean onMarkerClick ( Marker marker) {
Bundle bundle = marker. getExtraInfo ( ) ;
initPop ( ) ;
ViewGroup. LayoutParams params = new MapViewLayoutParams. Builder ( ) .
layoutMode ( MapViewLayoutParams. ELayoutMode. mapMode)
. position ( marker. getPosition ( ) )
. width ( MapViewLayoutParams. WRAP_CONTENT)
. height ( MapViewLayoutParams. WRAP_CONTENT)
. yOffset ( - 5 )
. build ( ) ;
mMapView. updateViewLayout ( pop, params) ;
pop. setVisibility ( View. VISIBLE) ;
title. setText ( marker. getTitle ( ) ) ;
return false ;
}
} ) ;
}
public void onClick ( View v) {
switch ( v. getId ( ) ) {
case R. id. button_one:
mSearch. geocode ( new GeoCodeOption ( ) . city ( "北京市" ) . address ( "海淀区中关村海龙大厦" ) ) ;
break ;
case R. id. button_two:
mSearch. geocode ( new GeoCodeOption ( ) . city ( "北京市" ) . address ( "西城区西便门" ) ) ;
break ;
}
}
private void init ( ) {
IntentFilter filter = new IntentFilter ( ) ;
filter. addAction ( SDKInitializer. SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR) ;
filter. addAction ( SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR) ;
SDKReceiver receiver = new SDKReceiver ( ) ;
registerReceiver ( receiver, filter) ;
mBaiduMap. setMapType ( BaiduMap. MAP_TYPE_NORMAL) ;
mBaiduMap. setIndoorEnable ( true ) ;
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory. zoomTo ( 18 ) ;
mBaiduMap. setMapStatus ( mapStatusUpdate) ;
mBaiduMap. getUiSettings ( ) . setCompassEnabled ( false ) ;
}
private void initPop ( ) {
pop = View. inflate ( getApplicationContext ( ) , R. layout. layout, null) ;
ViewGroup. LayoutParams params = new MapViewLayoutParams. Builder ( ) . layoutMode ( MapViewLayoutParams. ELayoutMode. mapMode)
. position ( new LatLng ( 22.5422870000 , 113.9804440000 ) )
. width ( MapViewLayoutParams. WRAP_CONTENT)
. height ( MapViewLayoutParams. WRAP_CONTENT)
. build ( ) ;
mMapView. addView ( pop, params) ;
pop. setVisibility ( View. INVISIBLE) ;
title = ( TextView) pop. findViewById ( R. id. title) ;
}
private void drawCircle ( LatLng p1) {
CircleOptions circleOptions = new CircleOptions ( ) ;
circleOptions. center ( p1)
. radius ( 200 )
. fillColor ( 0x3000FF00 )
. stroke ( new Stroke ( 10 , 0x600FF000 ) ) ;
mBaiduMap. addOverlay ( circleOptions) ;
}
private void drawText ( ) {
TextOptions textOptions = new TextOptions ( ) ;
textOptions. fontColor ( Color. RED)
. text ( "自定义文字覆盖物" )
. position ( new LatLng ( 22.5422870000 , 113.9804440000 ) )
. fontSize ( 20 )
. typeface ( Typeface. SERIF)
. rotate ( 30 ) ;
mBaiduMap. addOverlay ( textOptions) ;
}
private void drawMark ( ) {
Bundle extraInfo = new Bundle ( ) ;
extraInfo. putString ( "title" , "世界之窗旁边的草房" ) ;
MarkerOptions markerOptions = new MarkerOptions ( ) ;
BitmapDescriptor bitmap = BitmapDescriptorFactory. fromResource ( R. mipmap. icon_mark) ;
markerOptions. position ( new LatLng ( 22.5422870000 , 113.9804440000 ) )
. icon ( bitmap)
. draggable ( true )
. extraInfo ( extraInfo. getBundle ( "title" ) ) ;
mBaiduMap. addOverlay ( markerOptions) ;
}
@Override
protected void onDestroy ( ) {
super . onDestroy ( ) ;
mMapView. onDestroy ( ) ;
}
@Override
protected void onResume ( ) {
super . onResume ( ) ;
mMapView. onResume ( ) ;
}
@Override
protected void onPause ( ) {
super . onPause ( ) ;
mMapView. onPause ( ) ;
}
public class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation ( BDLocation location) {
double latitude = location. getLatitude ( ) ;
double longitude = location. getLongitude ( ) ;
Log. e ( "444" , latitude + " " + longitude) ;
MyLocationData locData = new MyLocationData. Builder ( )
. accuracy ( location. getRadius ( ) )
. direction ( 100 ) . latitude ( location. getLatitude ( ) )
. longitude ( location. getLongitude ( ) ) . build ( ) ;
mBaiduMap. setMyLocationData ( locData) ;
mLocationClient. stop ( ) ;
LatLng latLng = new LatLng ( latitude, longitude) ;
my_now_latLng= latLng;
Toast. makeText ( MainActivity. this , "现在我的位置1" + my_now_latLng, Toast. LENGTH_LONG) . show ( ) ;
MapStatusUpdate msu = MapStatusUpdateFactory. newLatLng ( latLng) ;
mBaiduMap. setMapStatus ( msu) ;
}
}
}
package com. example. administrator. test_map;
import android. content. Context;
import android. graphics. Color;
import com. baidu. location. LocationClient;
import com. baidu. location. LocationClientOption;
import com. baidu. mapapi. map. BitmapDescriptor;
import com. baidu. mapapi. map. BitmapDescriptorFactory;
import com. baidu. mapapi. map. MyLocationConfiguration;
public class MyPositioning {
private Context maincontext= MainActivity. getMainActivity ( ) ; ;
public void initLocationOption ( MainActivity. MyLocationListener myLocationListener ) {
LocationClient locationClient = new LocationClient ( maincontext) ;
LocationClientOption locationOption = new LocationClientOption ( ) ;
locationClient. registerLocationListener ( myLocationListener) ;
locationOption. setLocationMode ( LocationClientOption. LocationMode. Hight_Accuracy) ;
locationOption. setCoorType ( "gcj02" ) ;
locationOption. setScanSpan ( 1000 ) ;
locationOption. setIsNeedAddress ( true ) ;
locationOption. setIsNeedLocationDescribe ( true ) ;
locationOption. setNeedDeviceDirect ( false ) ;
locationOption. setLocationNotify ( true ) ;
locationOption. setIgnoreKillProcess ( true ) ;
locationOption. setIsNeedLocationDescribe ( true ) ;
locationOption. setIsNeedLocationPoiList ( true ) ;
locationOption. SetIgnoreCacheException ( false ) ;
locationOption. setOpenGps ( true ) ;
locationOption. setIsNeedAltitude ( false ) ;
locationOption. setOpenAutoNotifyMode ( ) ;
locationOption. setOpenAutoNotifyMode ( 3000 , 1 , LocationClientOption. LOC_SENSITIVITY_HIGHT) ;
locationClient. setLocOption ( locationOption) ;
locationClient. start ( ) ;
}
public MyLocationConfiguration locationConfig ( ) {
MyLocationConfiguration. LocationMode locationMode = MyLocationConfiguration. LocationMode. NORMAL;
boolean enableDirection = true ;
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory. fromResource ( R. mipmap. ic_launcher) ;
int accuracyCircleFillColor = Color. parseColor ( "#99ff0000" ) ;
int accuracyCircleStrokeColor = Color. parseColor ( "#11ff0000" ) ;
MyLocationConfiguration locationConfiguration = new MyLocationConfiguration (
locationMode,
enableDirection,
bitmapDescriptor,
accuracyCircleFillColor,
accuracyCircleStrokeColor
) ;
return locationConfiguration;
}
public LocationClient initLBS ( LocationClient mLocationClient, MainActivity. MyLocationListener myListener) {
mLocationClient= new LocationClient ( maincontext) ;
mLocationClient. registerLocationListener ( myListener) ;
LocationClientOption option = new LocationClientOption ( ) ;
option. setLocationMode ( LocationClientOption. LocationMode. Hight_Accuracy) ;
option. setCoorType ( "bd09ll" ) ;
option. setScanSpan ( 1000 ) ;
option. setOpenGps ( true ) ;
mLocationClient. setLocOption ( option) ;
return mLocationClient;
}
}
package com. example. administrator. test_map;
import android. content. BroadcastReceiver;
import android. content. Context;
import android. content. Intent;
import android. widget. Toast;
import com. baidu. mapapi. SDKInitializer;
public class SDKReceiver extends BroadcastReceiver {
@Override
public void onReceive ( Context context, Intent intent) {
String action = intent. getAction ( ) ;
if ( action. equals ( SDKInitializer. SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR) ) {
Toast. makeText ( context, "无法连接网络" , Toast. LENGTH_SHORT) . show ( ) ;
} else if ( action. equals ( SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR) ) {
Toast. makeText ( context, "百度地图key效验失败" , Toast. LENGTH_SHORT) . show ( ) ;
} else if ( action. equals ( SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK) ) {
}
}
}
package com. example. administrator. test_map;
import android. app. Application;
import com. baidu. mapapi. CoordType;
import com. baidu. mapapi. SDKInitializer;
public class DemoApplication extends Application {
@Override
public void onCreate ( ) {
super . onCreate ( ) ;
SDKInitializer. initialize ( this ) ;
SDKInitializer. setCoordType ( CoordType. BD09LL) ;
}
}