定位
2016-04-30 15:24
330 查看
放假睡到现在也是蛮颓废的,来来来,我们来写篇博客治愈一下
老步骤了,设置权限,导包,以及为了连通网络加入一些代码,我这次直接把文件展示出来吧
manifest
app
我们写一个LocalService类,其中包含开始定位,以及停止定位,注册监听以及移除监听等方法
记住要在manifest里面设置哟,就是这个
然后我们来写主程序,给按钮绑定监听
定位结果回调
停止定位时
以上是一个简单的定位,我也是查看了百度的demo,然后删删改改,他的demo上功能更全面,我删除了一些我不需要的,所以设置权限的时候有些东西可能是多余的,大家将就看一下吧,好困,睡觉去了
老步骤了,设置权限,导包,以及为了连通网络加入一些代码,我这次直接把文件展示出来吧
manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sency.locademo" > <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="22" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission> <uses-permission android:name="android.permission.READ_LOGS" > </uses-permission> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <application android:name=".LocationApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="SvwG9w6WOrHBmXN9vOOpNYb3L9Uim0Se" /> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
app
android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.example.sency.locademo" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } } dependencies { compile 'com.android.support:appcompat-v7:23.1.0' compile files('libs/gson-2.3.1.jar') compile files('libs/httpclient-4.4.1.jar') compile files('libs/httpcore-4.4.1.jar') compile files('libs/locSDK_6.13.jar') compile files('libs/baidumapapi_v3_5_0.jar') }
我们写一个LocalService类,其中包含开始定位,以及停止定位,注册监听以及移除监听等方法
import android.content.Context; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; /** * Created by sency on 2016/4/28. */ public class LocationService { private LocationClient client = null; private LocationClientOption mOption,DIYoption; private Object objLock = new Object(); /*** * * @param locationContext */ public LocationService(Context locationContext){ //同步锁,一个时间内只有一个线程得到执行,从而有效避免了类成员变量的访问冲突 synchronized (objLock) { if(client == null){ client = new LocationClient(locationContext); client.setLocOption(getDefaultLocationClientOption()); } } } /*** * * @param listener * @return */ public boolean registerListener(BDLocationListener listener){ boolean isSuccess = false; if(listener != null){ client.registerLocationListener(listener); isSuccess = true; } return isSuccess; } public void unregisterListener(BDLocationListener listener){ if(listener != null){ client.unRegisterLocationListener(listener); } } /*** * * @param option * @return isSuccessSetOption */ public boolean setLocationOption(LocationClientOption option){ boolean isSuccess = false; if(option != null){ if(client.isStarted()) client.stop(); DIYoption = option; client.setLocOption(option); } return isSuccess; } public LocationClientOption getOption(){ return DIYoption; } /*** * * @return DefaultLocationClientOption */ public LocationClientOption getDefaultLocationClientOption(){ if(mOption == null){ mOption = new LocationClientOption(); mOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 mOption.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; mOption.setScanSpan(3000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 mOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 mOption.setIsNeedLocationDescribe(true);//可选,设置是否需要地址描述 mOption.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果 mOption.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 mOption.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 mOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” mOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 mOption.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 } return mOption; } public void start(){ synchronized (objLock) { if(client != null && !client.isStarted()){ client.start(); } } } public void stop(){ synchronized (objLock) { if(client != null && client.isStarted()){ client.stop(); } } } }再写一个LocationApplication类用来初始化SDK
import android.app.Application; import com.baidu.mapapi.SDKInitializer; /** * 主Application,所有百度定位SDK的接口说明请参考线上文档:http://developer.baidu.com/map/loc_refer/index.html * * 百度定位SDK官方网站:http://developer.baidu.com/map/index.php?title=android-locsdk * * 直接拷贝com.baidu.location.service包到自己的工程下,简单配置即可获取定位结果,也可以根据demo内容自行封装 */ public class LocationApplication extends Application { public LocationService locationService; //public Vibrator mVibrator; @Override public void onCreate() { super.onCreate(); /*** * 初始化定位sdk,建议在Application中创建 */ locationService = new LocationService(getApplicationContext()); /* 在应用创建时初始化SDK: 注意:在SDK各功能组件使用之前都需要调用SDKInitializer.initialize(getApplicationContext()); 因此我们建议该方法放在Application的初始化方法中。 */ SDKInitializer.initialize(getApplicationContext()); } }
记住要在manifest里面设置哟,就是这个
<application android:name=".LocationApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
然后我们来写主程序,给按钮绑定监听
protected void onStart() { // TODO Auto-generated method stub super.onStart(); // -----------location config ------------ locationService = ((LocationApplication) getApplication()).locationService; //获取locationservice实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取locationservice实例的 locationService.registerListener(mListener); //注册监听 int type = getIntent().getIntExtra("from", 0); if (type == 0) { locationService.setLocationOption(locationService.getDefaultLocationClientOption()); } else if (type == 1) { locationService.setLocationOption(locationService.getOption()); } loca.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { locationService.start();// 定位SDK } }); } }
定位结果回调
private BDLocationListener mListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { // TODO Auto-generated method stub if (null != location && location.getLocType() != BDLocation.TypeServerError) { city.setText(location.getAddrStr()); } } };
停止定位时
protected void onStop() { // TODO Auto-generated method stub locationService.unregisterListener(mListener); //注销掉监听 locationService.stop(); //停止定位服务 super.onStop(); }
以上是一个简单的定位,我也是查看了百度的demo,然后删删改改,他的demo上功能更全面,我删除了一些我不需要的,所以设置权限的时候有些东西可能是多余的,大家将就看一下吧,好困,睡觉去了
相关文章推荐
- 北京好玩的博物馆
- C++走向远洋——42(项目二,我的数组类,深复制,构造函数)
- HDU 5606 tree(并查集的应用)
- 剑指offer(58):链表中环的入口节点
- IoC容器的初始化过程
- linux命令英文缩写的含义(方便记忆)
- Git学习9:Git远程版本库
- python day2:python 初识(二)
- 期末总结
- Fiddler系列之修改host
- HDOJ(HDU) 2097 Sky数(进制)
- 富文本编辑器
- HDOJ(HDU) 2097 Sky数(进制)
- C/C++中extern关键字详解
- java抽象类
- PHP基础数组操作(二)
- thinkPHP的<eq>标签
- oracle用户创建及权限设置及表空间
- Java构造和解析Json数据的两种方法详解二
- swift2.0 学习笔记eight