百度地图集成

来源:互联网 发布:oa系统的网络拓扑图 编辑:程序博客网 时间:2024/06/05 20:43
首先到百度地图开发者中心下载相关Sdk和文件
在AndroidManifest.xml 中添加你的key和服务
<application> 中添加百度的Service和key,下面在百度地图集成中也有显示
<meta-data    android:name="com.baidu.lbsapi.API_KEY"    android:value="你自己的Key" /><service    android:name="com.baidu.location.f"    android:enabled="true"    android:process=":remote"></service>

</application>
//首先在Application中初始化,记得在AndroidManifest.xml的application中使用name调用
public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        SDKInitializer.initialize(getApplicationContext());    }}
//在布局中使用百度地图
<com.baidu.mapapi.map.MapView    android:id="@+id/map"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:clickable="true"></com.baidu.mapapi.map.MapView>

下面这个类是定位的,百度给的集成文档中不全面
public class LocationActivity extends AppCompatActivity {    // 定位相关    MapView mMapView;    BaiduMap mBaiduMap;    // 定位相关    LocationClient mLocClient;    //定位回调监听    public MyLocationListenner myListener = new MyLocationListenner();    //MyLocationData 可以理解成当前位置    private MyLocationData locData;    // 是否首次定位    boolean isFirstLoc = true;    private double mCurrentLat = 0.0;    private double mCurrentLon = 0.0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_location2);        //如果定位不准确(到非洲几内亚湾),首先去设置App的应用权限,第二去检查sha1配置流程是否正确        mMapView = (MapView) findViewById(R.id.map);        //拿到baiduMap        mBaiduMap = mMapView.getMap();        // 开启定位图层 ,设置地图支持定位        mBaiduMap.setMyLocationEnabled(true);        // 定位初始化        mLocClient = new LocationClient(this);        //注册定位回调监听        mLocClient.registerLocationListener(myListener);        //设置定位的细节        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true); // 打开gps        option.setCoorType("bd09ll"); // 设置坐标类型        option.setScanSpan(1000);        mLocClient.setLocOption(option);        //这个开始去定位        mLocClient.start();    }    /**     * 定位SDK监听函数     */    public class MyLocationListenner implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            //去拿经纬度            mCurrentLat = location.getLatitude();            mCurrentLon = location.getLongitude();            //显示当前位置            locData = new MyLocationData.Builder()                    //精确度                    .accuracy(location.getRadius())                    .latitude(location.getLatitude())                    .longitude(location.getLongitude())                    .build();            //把当前位置设置到map上            mBaiduMap.setMyLocationData(locData);            //第一次进入的时候,设置地图的缩放级别            if (isFirstLoc) {                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(),                        location.getLongitude());                MapStatus.Builder builder = new MapStatus.Builder();                //zoom设置地图缩放级别,越大的话地图的范围越大                builder.target(ll).zoom(18.0f);                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));            }        }    }    @Override    protected void onPause() {        mMapView.onPause();        super.onPause();    }    @Override    protected void onResume() {        mMapView.onResume();        super.onResume();    }    @Override    protected void onDestroy() {        // 退出时销毁定位        mLocClient.stop();        // 关闭定位图层        mBaiduMap.setMyLocationEnabled(false);        mMapView.onDestroy();        mMapView = null;        super.onDestroy();    }}
下面这个是导航的Activity,设置一个按钮跳转打开手机上的百度地图,如果没有安装,会提示你下载
//注意导航和定位需要设置不同的 MAIN 启动Activity
<Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerInParent="true"    android:onClick="onClick"    android:text="开始导航" />
public class NavigationActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_navigation);    }    // 检查手机上是否安装了指定的软件    public static boolean isAvilible(Context context, String packageName) {        //获取packagemanager        final PackageManager packageManager = context.getPackageManager();        //获取所有已安装程序的包信息        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);        //用于存储所有已安装程序的包名        List<String> packageNames = new ArrayList<String>();        //从pinfo中将包名字逐一取出,压入pName list中        if (packageInfos != null) {            for (int i = 0; i < packageInfos.size(); i++) {                String packName = packageInfos.get(i).packageName;                packageNames.add(packName);            }        }        //判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE        return packageNames.contains(packageName);    }    public void onClick(View view) {        Intent intent;        if (isAvilible(this, "com.baidu.BaiduMap")) {//传入指定应用包名            try {                intent = Intent.getIntent("intent://map/direction?" +                        //"origin=latlng:"+"34.264642646862,108.95108518068&" +   //起点  此处不传值默认选择当前位置                        "destination=北京西站" +      //终点                        "&mode=driving&" +                        "region=中国" +                        "&src=新浪#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");                this.startActivity(intent);            } catch (URISyntaxException e) {            }        } else {            //未安装            //market为路径,id为包名            //显示手机上所有的market商店            Toast.makeText(this, "您尚未安装百度地图", Toast.LENGTH_LONG).show();            Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");            intent = new Intent(Intent.ACTION_VIEW, uri);            this.startActivity(intent);        }    }}


原创粉丝点击