作者:luyanhong
转载请加说明、链接。
环境:Eclipse。
扩展包:
baiduumapapi_v2_1_1.jar
;
locSDK_3.1.jar
;
(放到libs/)
so文件:
libapp_BaiduMapApplib_v2_1_1.so
;
liblocSDK3.so
;
libvi_voslib.so
; (放到libs/armeabi/,是否都有用处,未进行测试)
AndroidManifest.xml
把百度地图要求的权限给上。我只删除了一些。具体如下:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<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_NETWORK_STATE" ></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" > </uses-permission>
<uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" ></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
定义一个Application: MyApplication.java
private static MyApplication mInstance = null;
public boolean m_bKeyRight = true;
BMapManager mBMapManager = null;
public static final String strKey = "3F4788E1F19CCF7BC6B4ACAA
397BD7868F9A974A";
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
initEngineManager(this);
}
@Override
//建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗
public void onTerminate() {
// TODO Auto-generated method stub
if (mBMapManager != null) {
mBMapManager.destroy();
mBMapManager = null;
}
super.onTerminate();
}
public void initEngineManager(Context context) {
if (mBMapManager == null) {
mBMapManager = new BMapManager(context);
}
if (!mBMapManager.init(strKey,new MyGeneralListener())) {
Toast.makeText(MyApplication.getInstance().getApplicationContext(),
"BMapManager
初始化错误!", Toast.LENGTH_LONG).show();
}
}
public static MyApplication getInstance() {
return mInstance;
}
// 常用事件监听,用来处理通常的网络错误,授权验证错误等
static class MyGeneralListener implements MKGeneralListener {
@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(MyApplication.getInstance().getApplicationContext(), "您的网络出错啦!",
Toast.LENGTH_LONG).show();
}
else if (iError == MKEvent.ERROR_NETWORK_DATA) {
Toast.makeText(MyApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",
Toast.LENGTH_LONG).show();
}
// ...
}
@Override
public void onGetPermissionState(int iError) {
if (iError ==
MKEvent.ERROR_PERMISSION_DENIED) {
//授权Key错误:
Toast.makeText(MyApplication.getInstance().getApplicationContext(),
"请在 DemoApplication.java文件输入正确的授权Key!", Toast.LENGTH_LONG).show();
MyApplication.getInstance().m_bKeyRight = false;
}
}
}
定义一个主Activity: MainActivity.java
public class MainActivity extends Activity {
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
LocationData locData = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//定位
mLocClient = new LocationClient( this );
mLocClient.registerLocationListener
(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);//打开gps
option.setCoorType("bd09ll");
//设置坐标类型
//
option.setScanSpan(5000); //是否实时定位,间隔为5秒
mLocClient.setLocOption(option);
mLocClient.start();
locData = new LocationData();
}
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null)
return ;
locData.latitude = location.getLatitude();//获取纬度
locData.longitude = location.getLongitude();//获取经度
locData.accuracy = location.getRadius();
locData.direction = location.getDerect();
}
public void onReceivePoi(BDLocation poiLocation) {
if (poiLocation == null){
return ;
}
}
}
@Override
protected void onDestroy() {
if (mLocClient != null)
mLocClient.stop();
MyApplication app = (MyApplication)this.getApplication();
if (app.mBMapManager != null) {
app.mBMapManager.destroy();
app.mBMapManager = null;
}
super.onDestroy();
}
}