温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

百度地图开放API初体验(二)

发布时间:2020-10-10 23:51:42 来源:网络 阅读:345 作者:_随心 栏目:移动开发

    前面已经实现了初始化百度地图,但是其默认显示位置是北京地区。换言之,它并没有根据自己需要而定位不同的位置。这里要介绍的,就是要实现简单的定位功能。


  1. 在AndroidManifest.xml中的application标签中声明service组件,因为每个app都拥有自己单独的定位service:


<application

  

   ...


   <service

       android:name="com.baidu.location.f" 

       android:enabled="true"

       android:process=":remote" >

    </service>


    ...

</application>


2.在AndroidManifest.xml中声明使用的权限。这个在第一篇介绍中,如果已经声明过了就足够使用,可以按照需求参考:

http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0


3.设置一个“我的位置”选项,这里不设置按钮,直接在菜单中显示点击,所以在res里面的menu文件夹下新建一个.xml文件(也可以用默认的),在里面设置一个item(这里用默认的main.xml):

<menu
...
    <item
        android:id="@+id/id_map_location"
        android:showAsAction="never"
        android:title="我的位置"/>
</menu>



4.进行main.java的编写:


public class MainActivity extends Activity {


        ...


        //定义相关定位变量

private LocationClient mLocationClient;

private MyLocationListener myLocationListener;

private boolean isFirstIn = true;

private double mLatitude;

private double mLongtitude;

        private Context context;

        private String mAddress;


//自定义定位图标

private BitmapDescriptor mIconLocation;


        ...


       protected void onCreate(Bundle savedInstanceState) {


             ...


             initLocation();//定位函数

      

             ...

       }  

       

private void initLocation(){

mLocationMode =LocationMode.NORMAL;//定义地图显示模式,这里是普通模式

mLocationClient =new LocationClient(this);//定位服务的客户端

myLocationListener = new MyLocationListener();//定位请求回调函数

mLocationClient.registerLocationListener(myLocationListener);//注册监听

LocationClientOption option = new LocationClientOption();//设置定位参数

option.setCoorType("bd09ll");//返回百度地图地标

option.setIsNeedAddress(true);//返回定位位置

option.setOpenGps(true);//打开GPS

option.setScanSpan(1000);//每1000ms扫描一次定位

mLocationClient.setLocOption(option);//设置LocationClientOption


//初始化图标,记得在res下的drawable文件下贴上自定义的图片

mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.test1);

       }


        //在onStart里面开启定位


        protected void onStart() {

super.onStart();

mBaiduMap.setMyLocationEnabled(true);

if(!mLocationClient.isStarted())

mLocationClient.start();

}


        //在onStop里面停止定位

protected void onStop() {

super.onStop();

mBaiduMap.setMyLocationEnabled(false);

mLocationClient.stop();

}


        //这个是每个工程自定义的Menu监听,监听item是否被选中

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main,menu);

return true;

}


        //选中item时的动作定义

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

        case R.id.id_map_location:

        LatLng latLng = new LatLng(mLatitude, mLongtitude);//取得目前位置的经纬度

MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//更新经纬度

mBaiduMap.animateMapStatus(msu);//以动画方式更新地图状态

        Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();//显示位置信息

                break;

default:

break;

}

return super.onOptionsItemSelected(item);

}


private class MyLocationListener implements BDLocationListener{

public void onReceiveLocation(BDLocation location){

MyLocationData data = new MyLocationData.Builder()//

   .accuracy(location.getRadius())//

   .latitude(location.getLatitude())//

   .longitude(location.getLongitude())//

   .build();

mBaiduMap.setMyLocationData(data);


   //设置自定义图标

   MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation);

mBaiduMap.setMyLocationConfigeration(config);

            

//更新经纬度

mLatitude = location.getLatitude();

mLongtitude = location.getLongitude();

 if(isFirstIn)

{   

LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);

mBaiduMap.animateMapStatus(msu);

isFirstIn = false;

        mAddress = location.getAddrStr();

Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();

}

  

}

}

}



    这里已经实现了简单的定位功能,小伙伴们可以尝试一下~

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI