百度地图集成

首先到百度地图开发者中心下载相关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);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值