文档章节

Android中的定位Demo

a
 aicjs
发布于 2016/01/01 19:33
字数 750
阅读 86
收藏 0

1. 首先要申请百度地图的key。其地址为:http://lbsyun.baidu.com/apiconsole/key可以按照这上面的流程去申请key值。在获取SHA1值的时候,推荐使用给的第一种方法(在cmd命令中获取,我之前使用的是从Eclipse >  Window > Preferences > Android > Build复制的,但是在使用的时候出现地图加载错误)。

2. 下载百度地图提供的jar包。

    勾选要使用的功能,然后下载开发包即可。我这里,使用了基础地图和定位功能,下载开发包之后,解压开,把 libs 文件夹下的内容,全部复制到你的Android项目的libs下就可以使用了。

3. 接下来需要在AndroidManifest.xml文件中,进行属性。

    (1) 定位需要的权限配置

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    (2) 在 application 标签下配置

    <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="这里是你申请的 key" />

    (3) 配置定位 service

    <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >

    到这里AnroidManifest.xml文件里的配置工作就了。

4. 第三步写一下定位页面的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <!-- 页面标题 -->
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:textSize="20sp"
        android:text="定位页面"/>
    
    <!-- 地图控件 -->
    <com.baidu.mapapi.map.MapView
        android:id="@+id/mapview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:clickable="true"
        ></com.baidu.mapapi.map.MapView>
    
    <!-- 回到当前位置的按钮 -->
    <Button 
        android:id="@+id/goback"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="回到当前位置"/>
       
</LinearLayout >

5. 最后就要写实现代码了

public class LocationActivity extends Activity {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private LocationClient mLocationClient = null;
    private BDLocationListener listener = new MyLocationListener();
    private Button goBack;
    private BDLocation location;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
        // 注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());

        setContentView(R.layout.activity_location);

        mLocationClient = new LocationClient(this);
        mLocationClient.registerLocationListener(listener);

        mMapView = (MapView) findViewById(R.id.mapview);
        mBaiduMap = mMapView.getMap();
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        // 开启定位图层
        mBaiduMap.setMyLocationEnabled(true);

        //定位的方法
        findLocation();

        goBack = (Button) findViewById(R.id.goback);
        location = new BDLocation();
        goBack.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                findLocation();
            }
        });

    }
    
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        // 关闭定位图层
        mBaiduMap.setMyLocationEnabled(false);
        mMapView.onDestroy();
        mLocationClient.stop();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
	super.onResume();
	mMapView.onResume();
    }

    @Override
    protected void onPause() {
	// TODO Auto-generated method stub
	super.onPause();
	mMapView.onPause();
    }
    
    //定位方法封装
    public void findLocation() {
        if (mLocationClient.isStarted()) {
            mLocationClient.stop();
        }
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);// 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(0);
        mLocationClient.setLocOption(option);
        // 开始定位
        mLocationClient.start();
    }
    
    
    class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
	    // TODO Auto-generated method stub

    	    // map view 销毁后不在处理新接收的位置
	    if (location == null || mMapView == null) {
	    	    return;
	    }
	    MyLocationData locData = new MyLocationData.Builder()
	        .accuracy(location.getRadius())
	        .direction(100).latitude(location.getLatitude())
	        .longitude(location.getLongitude())
	        .build();
            mBaiduMap.setMyLocationData(locData);
			
	    LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
	    MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
	    mBaiduMap.animateMapStatus(u);
        }
    }
}

这样的一个Android定位的Demo就写好了。
















© 著作权归作者所有

a
粉丝 1
博文 1
码字总数 750
作品 0
郑州
程序员
私信 提问
android 推送

@Nic_Sun 你好,想跟你请教个问题: 在Android 使用GCM(Google Cloud Messaging)推送消息中第三步 :定位到 samples/gcm-demo-client,执行命令:$ android update project --name GCMDemo -...

scjunjun
2013/11/22
142
0
Android 使用GCM(Google Cloud Messaging)推送消息

关于android实现推送方式解决方案我想大家已经不会觉得陌生了,如果大家有兴趣,可以了解以下四个解决方案: 1. C2DM(Android Cloud to Device Messageing) 云端推送功能 Android从2.2版本开...

Sun1009
2012/12/25
0
22
【视频教程】如何使用定位SDK进行基于LBS的开发

分享一个优质的视频教程给大家,非常浅显易懂,对LBS感兴趣的同学们可以来学习下。 如何使用定位 SDK进行开发01——Android平台、定位和天气简介 如何使用定位 SDK进行开发02——地理围栏 如...

高德开发平台
2015/01/06
97
0
Xamarin.Android 使用百度地图获取定位信息

最近做一个项目,web端使用百度地图,PDA使用手持机自带的GPS定位系统获取经纬度,然后再百度地图上显示该经纬度会有一定距离的差异,这里就像可乐的瓶子拧上雪碧的盖子,能拧的上却不美观。...

键盘演绎青春
2018/07/25
0
0
CSS实现水平垂直居中的10种方式(史上最全)

划重点,这是一道面试必考题,很多面试官都喜欢问这个问题,我就被问过好几次了 要实现上图的效果看似很简单,实则暗藏玄机,本文总结了一下CSS实现水平垂直居中的方式大概有下面这些,本文将...

颜海镜
2018/09/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式

//分静态代理和动态代理,区别:是否再编译时知道被被代理的对象 //思想,被代理类将自己的处理交给代理类,代理类可以添加一些新的功能,之后有代理类和客户端交互 https://www.cnblogs.co...

南桥北木
9分钟前
0
0
Spring系列教程七: Spring 整合mybatis的四种方式

一、使用注解实现整合mybatis 项目目录如下 第一步、导入jar包 <build> <resources> <!-- mapper.xml文件在java目录下 --> <resource> ......

我叫小糖主
15分钟前
4
0
阿里P7架构师:这些技术点没搞懂,我劝你不要跳槽!

阿里P7架构师架构师:这些技术点没搞懂,我劝你不要跳槽! 哪些技术点呢? 废话不多说,技术点全在下面这6张图里面了! 1.怎么看源码? 2.分布式 3.微服务 4.性能优化 5.工程化 粉丝福利:一...

别打我会飞
33分钟前
2
0
易错题

父类必须有一个无参构造,不然会报Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor...

architect刘源源
38分钟前
1
0
使用Json4s 将带有Timestamp的对象转json时 变为所在时区

在有Timestamp属性的对象转json时 最后出来的时间会减小8小时,是因为变成了0时区,需要将隐式转换中添加设置本地时区 import org.json4s.{DefaultFormats, Formats}import org.json4s.jac...

可达鸭Go
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部