您的位置:首页 > 移动开发 > Android开发

android百度定位

2016-05-04 10:53 344 查看
吐槽一下,百度地图用的真心的不怎么滴,但是需求这样,只能硬着头写了,首先加载权限:

<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="请输入你的Ak值" />


由于是第三方定位代码直接上:

package com.example.AllFragment;

import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.SDKInitializer;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.MapStatus;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.MyLocationConfiguration;

import com.baidu.mapapi.map.MyLocationData;

import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;

import com.baidu.mapapi.model.LatLng;

import com.example.bangbang.R;

public class BuyFragment2 extends Fragment{

// 定位相关
LocationClient mLocClient;
private MapView mMapView;
public MyLocationListenner myListener = new MyLocationListenner();
BaiduMap mBaiduMap;
boolean isFirstLoc = true; // 是否首次定位
Button requestLocButton;
private LocationMode mCurrentMode;//当前图层的状态,跟随,罗盘
//自定义图标
BitmapDescriptor mCurrentMarker;
private Button nav;
private TextView start;
private TextView end;
private EditText outstart;
private EditText outend;
private TextView buyadd;
public BMapManager mapManager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub

//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getActivity().getApplicationContext());

View view = View.inflate(getActivity(), R.layout.buyfrag, null);
mMapView = (MapView) view.findViewById(R.id.bmapView);
buyadd = (TextView) view.findViewById(R.id.buyadd);

mBaiduMap = mMapView.getMap();

// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
mCurrentMode = LocationMode.NORMAL;

mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));

// 定位初始化
mLocClient = new LocationClient(getActivity());
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要 , 反编译获得具体位置,只有网络定位才可以
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(5000);
//设置定位的信息
mLocClient.setLocOption(option);
mLocClient.start();

mapManager = new BMapManager();

return view;
}
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {

@Override
public void onReceiveLocation(BDLocation location) {

buyadd.setText(location.getAddrStr());
String city = location.getCity();
Log.i("aaa", "city========="+city);

// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);

94bb
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}

public void onReceivePoi(BDLocation poiLocation) {
}
}

@Override
public void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
public void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}


}

不显示图层,只获取当前城市

package com.example.citytest;

import android.app.Activity;

import android.os.Bundle;

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.LocationClientOption.LocationMode;

import com.baidu.mapapi.SDKInitializer;

public class MainActivity extends Activity {

public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();

private TextView text;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.cname);
Dingwei();
}

private void Dingwei() {

mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
mLocationClient.registerLocationListener(myListener); // 注册监听函数
initLocation();
mLocationClient.start();
}

private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);// 可选,默认false,设置是否使用gps
option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {

public void onReceiveLocation(BDLocation location) {
text.setText(location.getCity());
}
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: