我是靠谱客的博主 文静水壶,最近开发中收集的这篇文章主要介绍Android笔记之高德地图定位(通过开启服务发送广播用handle消息机制更新位置信息),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
步骤 1.导入高德地图jar包 2.新建服务类(定位成功发送广播之后关闭服务)3.接收广播之后更新位置信息
GPSService类(记得在配置文件中配置service)
public class GPSService extends Service implements AMapLocationListener {
private static final String TAG = "GPSService";
private LocationManagerProxy mAMapLocManager = null;
private AMapLocation aMapLocation;// 用于判断定位超时
private Handler handler = new Handler();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
mAMapLocManager = LocationManagerProxy.getInstance(this);
/*
* mAMapLocManager.setGpsEnable(false);
* 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location
* API定位采用GPS和网络混合定位方式
* 第一个参数是定位provider,第二个参数时间最短是5000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
*/
mAMapLocManager.requestLocationUpdates(LocationProviderProxy.AMapNetwork, 5000, 10, this);
handler.postDelayed(stop, 12000);// 设置超过12秒还没有定位到就停止定位
}
private Runnable stop = new Runnable() {
@Override
public void run() {
if (aMapLocation == null) {
stopLocation();// 销毁掉定位
}
}
};
/** 销毁定位 */
private void stopLocation() {
if (mAMapLocManager != null) {
mAMapLocManager.removeUpdates(this);
mAMapLocManager.destory();
}
mAMapLocManager = null;
}
@Override
public void onLocationChanged(AMapLocation location) {
if (location != null) {
this.aMapLocation = location;// 判断超时机制
double geoLat = location.getLatitude();
double geoLng = location.getLongitude();
String cityCode = "";
String desc = "";
Bundle locBundle = location.getExtras();
if (locBundle != null) {
cityCode = locBundle.getString("citycode");
desc = locBundle.getString("desc");
}
// String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
// + "n精
度
:" + location.getAccuracy() + "米"
// + "n定位方式:" + location.getProvider() + "n定位时间:"
// + new Date(location.getTime()).toLocaleString() + "n城市编码:"
// + cityCode + "n位置描述:" + desc + "n省:"
// + location.getProvince() + "n市:" + location.getCity()
// + "n区(县):" + location.getDistrict() + "n区域编码:" + location
// .getAdCode());
// 发送广播
Intent intent = new Intent();
intent.setAction(Common.LOCATION_ACTION);
// 经纬度是double类型的
intent.putExtra("geoLat", geoLat);
intent.putExtra("geoLng", geoLng);
intent.putExtra("cityCode", location.getAdCode());
intent.putExtra("city", location.getCity());
sendBroadcast(intent);
// 停止服务
stopSelf();
}
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
}
@Override
public boolean stopService(Intent name) {
stopLocation();// 停止定位
return super.stopService(name);
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
MainActivity
public class MainActivity extends Activity {
private LocationBroadcastReceiver receiver;
private String cityCode;//城市ID
private String city;//城市地址
private double geoLat;//经度
private double geoLng;//纬度
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_find_store);
// 启动服务
Intent intent = new Intent();
intent.setClass(this, GPSService.class);
startService(intent);
//注册广播
IntentFilter filter = new IntentFilter();
filter.addAction(Common.LOCATION_ACTION);
receiver = new LocationBroadcastReceiver();
this.registerReceiver(new LocationBroadcastReceiver(), filter);
}
/** 广播接收着 */
private class LocationBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(Common.LOCATION_ACTION))
return;
cityCode = intent.getStringExtra("cityCode");
city = intent.getStringExtra("city");
geoLat = intent.getDoubleExtra("geoLat", -1);
geoLng = intent.getDoubleExtra("geoLng", -1);
Message message = new Message();
message.what = 0;
handler.sendMessage(message);
}
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0) {
//在这里将获取到的定位信息展示到UI界面
}
};
};
}
Android简单定位实例参考博文
Android定位实例
高德地图jar包可以去官网下载
最后
以上就是文静水壶为你收集整理的Android笔记之高德地图定位(通过开启服务发送广播用handle消息机制更新位置信息)的全部内容,希望文章能够帮你解决Android笔记之高德地图定位(通过开启服务发送广播用handle消息机制更新位置信息)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复