百度地图定位模块
来源:互联网 发布:快速软件开发平台 编辑:程序博客网 时间:2024/06/05 10:28
本文转自http://blog.csdn.net/jwzhangjie/article/details/8924198
最近使用百度地图,查看了官方的说明,然后做了一个Demo,作为入门,如果看了我之前的代码,有一个习惯就是使用代码写布局,感觉这样比较快,习惯而已。
源码如下:
- package com.zhangjie.local;
- import android.os.Bundle;
- import android.os.Vibrator;
- import android.app.Activity;
- import android.app.Service;
- import android.util.DisplayMetrics;
- import android.util.Log;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.LinearLayout;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import com.baidu.location.BDLocation;
- import com.baidu.location.BDLocationListener;
- import com.baidu.location.LocationClient;
- import com.baidu.location.LocationClientOption;
- import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类
- public class Local extends Activity implements OnClickListener{
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getDisplayMetrics();
- initLayout();
- setContentView(Parent);
- myListener = new MyLocationListener();
- mLocationClient = new LocationClient(getApplicationContext());
- mLocationClient.registerLocationListener(myListener);
- //设置定位参数包括:定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等
- option = new LocationClientOption();
- option.setOpenGps(true);
- option.setAddrType("all");//返回定位结果包含地址信息
- option.setCoorType("bd0911");//返回的定位结果是百度经纬度,默认值gcj02
- option.setScanSpan(5000);//设置发起请求的时间间隔为5000ms
- option.disableCache(true);//禁止开启缓存定位
- option.setPoiNumber(5);//最多返回POI个数
- option.setPoiDistance(1000);//poi查询距离
- option.setPoiExtraInfo(true);//是否需要POI的电话和地址等详细信息
- mLocationClient.setLocOption(option);
- mLocationClient.start();
- }
- /**
- * 初始化布局
- */
- public void initLayout(){
- Parent = new RelativeLayout(this);
- bottomLayout = new LinearLayout(this);
- bottomLayout.setId(10);
- contentTextView = new TextView(this);
- contentTextView.setText(R.string.content);
- localButton = new Button(this);
- localButton.setText(R.string.localrequest);
- localButton.setId(11);
- localButton.setOnClickListener(this);
- poiButton = new Button(this);
- poiButton.setText(R.string.poirequest);
- poiButton.setId(12);
- poiButton.setOnClickListener(this);
- notifyButton = new Button(this);
- notifyButton.setText(R.string.notify);
- notifyButton.setId(13);
- notifyButton.setOnClickListener(this);
- offlineButton = new Button(this);
- offlineButton.setText(R.string.offine);
- offlineButton.setId(14);
- offlineButton.setOnClickListener(this);
- //設置底部佈局的button
- int disten = (Screen_width - dip2px(buttonWidth) * 4) / 5;
- LinearLayout.LayoutParams buttonInBottomLayoutParams = new LinearLayout.LayoutParams(dip2px(buttonWidth), dip2px(buttonHeight));
- buttonInBottomLayoutParams.leftMargin = disten;
- bottomLayout.addView(localButton, buttonInBottomLayoutParams);
- bottomLayout.addView(poiButton, buttonInBottomLayoutParams);
- bottomLayout.addView(notifyButton, buttonInBottomLayoutParams);
- bottomLayout.addView(offlineButton, buttonInBottomLayoutParams);
- RelativeLayout.LayoutParams bottomInParentLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
- bottomInParentLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
- Parent.addView(bottomLayout, bottomInParentLayoutParams);
- //設置contentTextView佈局
- RelativeLayout.LayoutParams contentInParentLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
- contentInParentLayoutParams.addRule(RelativeLayout.ABOVE, 10);
- Parent.addView(contentTextView, contentInParentLayoutParams);
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case 11:
- //发起定位请求。请求过程是异步的,定位结果在上面的监听函数onReceiveLocation中获取。
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.requestLocation();
- }else {
- Log.e("LocSDK3", "locClient is null or not started");
- }
- break;
- case 12:
- //发起POI查询请求。请求过程是异步的,定位结果在上面的监听函数onReceivePoi中获取
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.requestPoi();
- }
- break;
- case 13:
- if (!clickNotify) {
- clickNotify = true;
- //位置提醒最多提醒3次,3次过后将不再提醒。 假如需要再次提醒,或者要修改提醒点坐标,都可通过函数SetNotifyLocation()来实现
- //位置提醒相关代码
- mNotifyer = new NotifyLister();
- mNotifyer.SetNotifyLocation(42.03249652949337,113.3129895882556,3000,"gps");//4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll)
- mLocationClient.registerNotify(mNotifyer);
- }else {
- clickNotify = false;
- //取消位置提醒
- mLocationClient.removeNotifyEvent(mNotifyer);
- }
- break;
- case 14:
- /*
- * 发起离线定位请求。请求过程是异步的,定位结果在上面的监听函数onReceiveLocation中获取。
- * getLocTypte = BDLocation.TypteOfflineLocation || BDLocation.TypeOfflineLocationFail
- * 表示是离线定位请求返回的定位结果
- */
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.requestOfflineLocation();
- }
- break;
- }
- }
- //获取屏幕的宽度,高度和密度以及dp / px
- public void getDisplayMetrics() {
- DisplayMetrics dm = new DisplayMetrics();
- dm = getApplicationContext().getResources().getDisplayMetrics();
- Screen_width = dm.widthPixels;
- Screen_height = dm.heightPixels;
- scale = getResources().getDisplayMetrics().density;
- }
- public int dip2px(float dpValue) {
- return (int)(dpValue * scale + 0.5f);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.local, menu);
- return true;
- }
- @Override
- protected void onStop() {
- super.onStop();
- if (mLocationClient != null) {
- mLocationClient.stop();
- mLocationClient = null;
- }
- }
- public class MyLocationListener implements BDLocationListener{
- //接收异步返回的定位结果,参数是BDLocation类型参数
- @Override
- public void onReceiveLocation(BDLocation location) {
- if (location == null) {
- return;
- }
- StringBuffer sb = new StringBuffer(256);
- sb.append("time: ");
- sb.append(location.getTime());
- sb.append("\nerror code: ");
- sb.append(location.getLocType());
- sb.append("\nlontitude: ");
- sb.append(location.getLongitude());
- sb.append("\nradius: ");
- sb.append(location.getRadius());
- if (location.getLocType() == BDLocation.TypeGpsLocation) {
- sb.append("\nspedd: ");
- sb.append(location.getSpeed());
- sb.append("\nsatellite: ");
- sb.append(location.getSatelliteNumber());
- }else if(location.getLocType() == BDLocation.TypeNetWorkLocation){
- sb.append("\naddr: ");
- sb.append(location.getAddrStr());
- }else if(location.getLocType() == BDLocation.TypeOffLineLocation || location.getLocType() == BDLocation.TypeOffLineLocationNetworkFail){
- }
- if (contentTextView != null) {
- contentTextView.setText(sb.toString());
- }
- }
- //接收异步返回的POI查询结果,参数是BDLocation类型参数
- @Override
- public void onReceivePoi(BDLocation arg0) {
- }
- }
- //BDNotifyListener实现
- public class NotifyLister extends BDNotifyListener{
- public void onNotify(BDLocationListener mListener, float distance){
- if (mVibrator == null) {
- mVibrator = (Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);
- }
- mVibrator.vibrate(1000);//振动提醒已到设定位置附近
- }
- }
- public LocationClient mLocationClient = null;
- LocationClientOption option;
- public BDLocationListener myListener;
- public NotifyLister mNotifyer;
- public Vibrator mVibrator;
- private TextView contentTextView;
- private Button localButton;
- private Button poiButton;
- private Button notifyButton;
- private Button offlineButton;
- private RelativeLayout Parent;
- private LinearLayout bottomLayout;
- public int Screen_width;
- public int Screen_height;
- public float scale;
- public int buttonWidth = 130;//dp
- public int buttonHeight = 50;//dp
- public boolean clickNotify = false;
- }
界面如下:
1 0
- 百度地图定位模块
- 百度地图 定位 地图
- 百度地图,百度定位。
- 百度地图之定位
- Android 百度地图 定位
- Android百度地图定位
- 百度地图定位基础
- 百度地图多点定位
- 百度地图定位问题
- Android 百度地图定位
- 百度地图 定位问题
- 百度地图定位操作
- iOS百度地图定位
- Android百度地图定位
- 百度地图定位
- 百度地图定位经纬度
- 百度地图定位
- HTML5定位+百度地图
- EDACN 论坛Xilinx 版帖子汇总
- EasyUITree实现树形结构Json串
- 10.4 异常与继承
- 项目经验分享——Java常用工具类集合
- (uva)1368DNA Consensus String(map)
- 百度地图定位模块
- 10.5 异常规范
- c++学习第三天
- Android关于AndroidManifest.xml详细分析
- (hadoop学习-3)Total Order Partitioner
- 常用的java工具类
- UIViewController的完整生命周期
- C#实现天气预报
- 10.6 C++标准库的异常类层次结构