Android位置服务开发

Android位置服务开发,第1张

概述1.使用LocationManager获取地理位置信息代码如下:privateTextViewpositiontext;privateStringprovider;privateLocationManagermanager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState) 1. 使用LocationManager获取地理位置信息

代码如下:

private TextVIEw positiontext;    private String provIDer;    private LocationManager manager;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        positiontext = (TextVIEw) findVIEwByID(R.ID.tv_show1);        // 使用LocationManager获取地理位置信息,先得到LocationManager对象        // 调用Context的getSystemService()方法接受一个字符串用于确定获取系统的哪个服务        // 传入Context.LOCATION_SERVICE这个服务        manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);        // 先用一个List集合获取所有可用的位置提供器        List<String> provIDerList = manager.getProvIDers(true);        // 选择一个位置提供器来确定设备当前位置,有三种可供选择,但是必须在设置中提前打开相关权限        // NETWORK_PROVIDER使用网络定位,精度差,耗电量少,用的较多        // GPS_PROVIDER使用GPS定位,精度高,耗电量高,用得较多        // PASSIVE_PROVIDER用的较少        if (provIDerList.contains(LocationManager.GPS_PROVIDER)) {            provIDer = LocationManager.GPS_PROVIDER;        } else if (provIDerList.contains(LocationManager.NETWORK_PROVIDER)) {            provIDer = LocationManager.NETWORK_PROVIDER;        } else {            Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_LONG).show();        }        // 将选择好的位置提供器传入到getLastKNownLocation()得到一个Location对象;        // 这个Location对象中包含了经度、纬度、海拔等一系列信息,然后提取需要的信息        Location location = manager.getLastKNownLocation(provIDer);        if (location != null) {            // 显示当前的位置信息            positiontext.setText("latitude is " + location.getLatitude() + "\n"                    + "Longitude is " + location.getLongitude());        }        // requestLocationUpdates()方法实时更新用户的位置信息,接收四个参数        // ①第一个参数是位置提供器的类型        // ②第二个参数是监听位置变化间隔的毫秒数        // ③第三个参数是监听位置变化间隔的距离,达到设定距离时,触发第四个参数的监听器的onLocationChanged()方法,        // 并把新的位置信息作为参数传入        // ④第四个参数是LocationListener()监听器接口,所以应该传入的是它的实现类的对象        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10,                Listener);    }    @OverrIDe    protected voID onDestroy() {        super.onDestroy();        // 关闭程序时将监听器移除        if (manager != null) {            manager.removeUpdates(Listener);        }    }    // 定义LocationListener()监听器接口的实现类    LocationListener Listener = new LocationListener() {        @OverrIDe        public voID onStatusChanged(String provIDer, int status, Bundle extras) {        }        @OverrIDe        public voID onProvIDerEnabled(String provIDer) {        }        @OverrIDe        public voID onProvIDerDisabled(String provIDer) {        }        @OverrIDe        public voID onLocationChanged(Location location) {            // 更新当前位置信息            positiontext.setText("latitude is " + location.getLatitude() + "\n"                    + "Longitude is " + location.getLongitude());        }    };

注意事项:Manifest文件中添加权限

<uses-permission androID:name="androID.permission.ACCESS_FINE_LOCATION" />
2. 使用百度地图显示①登录网址

http://lbsyun.baIDu.com/APIconsole/key

注册成为一名百度开发者,并申请API Key,注册页面如下

注册成功,点击邮箱链接激活

接下来正式申请API Key,注意事项看下面两图

特别注意,每开发一个程序都应该重新申请Key,因为每次的包名不一样

点击提交之后就会看到自己申请的Key了

接下来进入这个网址

http://lbsyun.baIDu.com/index.PHP?Title=androIDsdk/sdkandev-download

下载AndroID版的SDK,接下来由于新旧版本以及指导书籍的不同,会有不同的做法,对我这个来说,我用的是Eclipse+新版本的baIDuAPI,找了好久在网上找到一篇可以使用的教程链接是

http://blog.csdn.net/chenyufeng1991/article/details/46980733

以下详细介绍配置过程

①如下图所示,箭头所指的地方都打勾,点击开发包进行下载

②下载完成后,会有多个jar包和一个armabi文件夹,把jar包和armabi文件夹复制到Eclipse工程目录下的libs文件夹下。如图:

③在百度服务器端的配置已经全部完成,下面开始写代码,在AndroIDMenifest.xml中添加:

这里特别注意,添加的这一段代码必须放在原来的application里面位置,如下面代码所示
<application        androID:allowBackup="true"        androID:icon="@drawable/ic_launcher"        androID:label="@string/app_name"        androID:theme="@style/Apptheme" >        <Meta-data            androID:name="com.baIDu.lbsAPI.API_KEY"            androID:value="BtM2ugHA16R8fvdyAc5cyxR9Q6GGMyoF" />        <activity            androID:name=".SecondActivity"            androID:label="@string/app_name" >            <intent-filter>                <action androID:name="androID.intent.action.MAIN" />                <category androID:name="androID.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            androID:name=".MainActivity"            androID:label="@string/app_name" >        </activity></application>
④添加权限:参考百度开发文档链接见⑦
 <uses-permission androID:name="androID.permission.ACCESS_FINE_LOCATION" />    <!-- 这是使用LocationManager获取地理位置信息的时候要用的权限 -->    <uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" />    <!-- //获取设备网络状态,禁用后无法获取网络状态 -->    <uses-permission androID:name="androID.permission.INTERNET" />    <!-- //网络权限,当禁用后,无法进行检索等相关业务 -->    <uses-permission androID:name="androID.permission.READ_PHONE_STATE" />    <!-- //读取设备硬件信息,统计数据 -->    <uses-permission androID:name="com.androID.launcher.permission.READ_SETTINGS" />    <!-- //读取系统信息,包含系统版本等信息,用作统计 -->    <uses-permission androID:name="androID.permission.ACCESS_WIFI_STATE" />    <!-- //获取设备的网络状态,鉴权所需网络代理 -->    <uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />    <!-- //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 -->    <uses-permission androID:name="androID.permission.WRITE_SETTINGS" />    <!-- //获取统计数据 -->    <uses-permission androID:name="androID.permission.GET_TASKS" />    <!-- //鉴权所需该权限获取进程列表 -->    <uses-permission androID:name="androID.permission.CAMERA" />    <!-- //使用步行AR导航,配置Camera权限 -->
⑤在布局文件中添加地图控件:

特别注意,这里的代码提示不会体现出来,所以需要自己敲出这些代码

<com.baIDu.mapAPI.map.MapVIEw         androID:ID="@+ID/bmapVIEw"         androID:layout_wIDth="fill_parent"         androID:layout_height="fill_parent"         androID:clickable="true" /> 
⑥在MainActivity.java中添加代码:
MapVIEw mMapVIEw = null;// 用于显示地图的控件;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 初始化地图SDK,注意一定要写在        // setContentVIEw(R.layout.activity_main)代码前        SDKInitializer.initialize(getApplicationContext());        setContentVIEw(R.layout.activity_second);        // 绑定控件;        mMapVIEw = (MapVIEw) findVIEwByID(R.ID.bmapVIEw);    }    @OverrIDe    protected voID onResume() {        super.onResume();        // 管理地图的生命周期:显示        mMapVIEw.onResume();    }    @OverrIDe    protected voID onPause() {        super.onPause();        // 管理地图的生命周期:暂停        mMapVIEw.onPause();    }    @OverrIDe    protected voID onDestroy() {        super.onDestroy();        // 管理地图的生命周期:销毁        mMapVIEw.onDestroy();    }
⑦具体更多内容请参考百度地图开发文档:

http://developer.baIDu.com/map/index.PHP?Title=androIDsdk/guIDe/hellobaIDumap

3. 使用百度地图定位到自己的位置

地图显示出来之后默认的是北京的地图,要定位到自己的位置需要加入下面代码

MapVIEw mMapVIEw = null;// 用于显示地图的控件;    private BaIDuMap map; // 百度地图提供的总控制器类    private boolean showmapflag = true;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 初始化地图SDK,注意一定要写在        // setContentVIEw(R.layout.activity_main);代码前;        Intent intent = getIntent();        String data = intent.getStringExtra("extra_data");        SDKInitializer.initialize(getApplicationContext());        setContentVIEw(R.layout.activity_second);        // 绑定控件;        mMapVIEw = (MapVIEw) findVIEwByID(R.ID.bmapVIEw);        // 获取BaIDuMap对象        map = mMapVIEw.getMap();        // 开始将经纬度坐标显示到地图的具体位置上        if (showmapflag == true) {            String[] location_data = data.split("=");            // 借助LatLng类让地图定位到某一个经纬度,传入的参数是double类型的经纬度坐标值            double my_latitude = Double.parseDouble(location_data[0]);            double my_longitude = Double.parseDouble(location_data[1]);            LatLng lng = new LatLng(my_latitude, my_longitude);            // animateMapStatus()将地图定位到指定的经纬度上            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(lng);            map.animateMapStatus(update);            // 这里用来设置地图的缩放级别            // MapStatusUpdateFactory的zoomTo()方法传入3-19之间的float数据            update = MapStatusUpdateFactory.zoomTo(12f);            map.animateMapStatus(update);            // 这个变量的作用是防止多次调用animateMapStatus()方法,            // 因为我们不动,只需要在程序第一次定位的时候显示一次即可            showmapflag = false;        }    }
4. 使用百度地图定位到自己的位置并标记出来①开启功能
// 设置设备显示在地图上的功能开启,否则设备的位置无法显示在地图上        map.setMyLocationEnabled(true);
②设备位置显示
// 这是用来在地图上标记自己位置的代码,这段代码必须在if(showmapflag == true)语句        // 的外面,因为地图只需要加载一次,但是自己的位置应该是实时更新的        // MyLocationData.Builder类用来封装设备当前所在位置的        MyLocationData.Builder builder = new MyLocationData.Builder();        // 将经纬度传入MyLocationData.Builder类对应的方法中        builder.latitude(my_latitude);        builder.longitude(my_longitude);        // build()方法生成一个MyLocationData对象        MyLocationData locationData = builder.build();        // 将MyLocationData对象传入到BaIDuMap的setMyLocationData()方法中        // 就可以在地图上将自己的位置显示出来        map.setMyLocationData(locationData);
③功能关闭
@OverrIDe    protected voID onDestroy() {        super.onDestroy();        // 程序退出时设置设备显示在地图上的功能关闭        map.setMyLocationEnabled(false);        // 管理地图的生命周期:销毁        mMapVIEw.onDestroy();    }

了解更多技术文章,欢迎关注我的个人公众号

总结

以上是内存溢出为你收集整理的Android位置服务开发全部内容,希望文章能够帮你解决Android位置服务开发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1064463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存