Bootstrap

(Android)百度地图--只定位获取数据不显示地图

作者: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();
       }
     
}
;