[转载]Android关于百度地图定位的使用

[转载]关于百度地图的使用 – 网络渔夫 – 博客园.

Android手机上使用百度地图来定位的资料在网上很难找到,经过两天的折腾,终于搞出来了。下面的代码已经实现完整定位,需要注意的就是,如果你的 百度地图的底图未显示出来,请确保你手机能使用GPRS(以移动为例)或WIFI联网,要使用精确定位的话,也必须要打开GPS。下面我们直接上代码,代 码说明,百度里面有,一看就知道:

step1 AndroidManifest.xml文件

<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.studio.basf.mapdemo" android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name"
        android:name="MapManagerApplication">
        <activity android:name=".MainActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>   
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>   
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>   
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <supports-screens android:largeScreens="true"
        android:normalScreens="true" android:smallScreens="true"
        android:resizeable="true" android:anyDensity="true" />
    <uses-sdk android:minSdkVersion="4" />
</manifest>

step2 首先建立一个全局应用类,主要是创建一个BMapManager实例,为了方便管理

package com.studio.basf.mapdemo;
 
import android.app.Application;
 
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKEvent;
import com.baidu.mapapi.MKGeneralListener;
 
public class MapManagerApplication extends Application {
    BMapManager bMapManager = null;
     
    static class MyGeneralListener implements MKGeneralListener {
 
        @Override
        public void onGetNetworkState(int iError) {
 
        }
 
        @Override
        public void onGetPermissionState(int iError) {
            if (iError ==  MKEvent.ERROR_PERMISSION_DENIED) {
                 
            }
        }
    }
 
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        bMapManager = new BMapManager(this);
        bMapManager.init("你的key", new MyGeneralListener());
    }   
}

step3 继承MapActivity,同时实现LocationListener接口

package com.studio.basf.mapdemo;
 
import android.location.Location;
import android.os.Bundle;
 
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKLocationManager;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;
 
public class MainActivity extends MapActivity implements LocationListener {
    private BMapManager mBMapMan = null;
    private MapView mMapView = null;
    private MapController mMapController = null;
    private MKLocationManager locationManager = null;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        mBMapMan = ((MapManagerApplication) getApplication()).bMapManager;
        if (mBMapMan == null) {
            ((MapManagerApplication) getApplication()).bMapManager = new BMapManager(
                    getApplication());
            ((MapManagerApplication) getApplication()).bMapManager.init(
                    "你的key",
                    new MapManagerApplication.MyGeneralListener());
            mBMapMan = ((MapManagerApplication) getApplication()).bMapManager;
        }
        super.initMapActivity(mBMapMan);
 
        locationManager = mBMapMan.getLocationManager();
        locationManager.requestLocationUpdates(this);
 
        mMapView = (MapView) findViewById(R.id.bmapsView);
        mMapView.setBuiltInZoomControls(true);// 设置启用默认的缩放控件
 
        mMapController = mMapView.getController();// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
        mMapController.setZoom(12);// 设置地图zoom级别
 
        MyLocationOverlay mylocTest = new MyLocationOverlay(this, mMapView);
        mylocTest.enableMyLocation();
        mylocTest.enableCompass();
        mMapView.getOverlays().add(mylocTest);
    }
 
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
 
        if (location != null) {
            mMapController.animateTo(new GeoPoint(
                    (int) (location.getLatitude() * 1E6), (int) (location
                            .getLongitude() * 1E6)));
        }
   }
 
    @Override
    protected void onDestroy() {
       // TODO Auto-generated method stub
        if (mBMapMan != null) {
            mBMapMan.destroy();
            ((MapManagerApplication) getApplication()).bMapManager = null;
            mBMapMan = null;
        }
        super.onDestroy();
    }
 
    @Override
    protected void onPause() {
       // TODO Auto-generated method stub
        if (mBMapMan != null) {
            mBMapMan.stop();
        }
        super.onPause();
    }
 
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        if (mBMapMan != null) {
            mBMapMan.start();
        }
        super.onResume();
    }
 
    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}

因为代码在需要在真机上运行才能看到效果,所以我这里就截图,上面的代码直接复制下来就可以使用。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏