机子自带GPS:
private void getlocationFromGPS(){
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
criteria.setAltitudeRequired(false);//不要求海拔
criteria.setBearingRequired(false);//不要求方位
criteria.setCostAllowed(false);//不允许有花费
criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
//获得位置服务的名称
String serviceName = this.LOCATION_SERVICE;
//获得位置服务的管理对象
LocationManager locationManager = (LocationManager)getSystemService(serviceName);
//从可用的位置提供器中,匹配以上标准的最佳提供器
String provider = locationManager.getBestProvider(criteria, true);
// 通过GPS获取定位的位置数据
location = locationManager.getLastKnownLocation(provider);
updateToNewLocation(location);
/**服务管理对象的监听器*/
//参数1:定位的方式 参数2:监听更新间隔时间(ms) 参数3:监听更新的距离(m) 参数4:监听的方法
locationManager.requestLocationUpdates(provider, 2000, 1, new LocationListener() {
public void onStatusChanged(String provider, int status, Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
public void onLocationChanged(Location location) {
updateToNewLocation(location);
}
});
}
private void updateToNewLocation(Location location) {
tv1 = (TextView) this.findViewById(R.id.tv_setting_adress);
if (location != null) {
latitude = location.getLatitude();
longitude= location.getLongitude();
tv1.setText("经纬度为: "+"维度:" + latitude+ ",经度; " + longitude);
} else {
tv1.setText("无法获取地理信息");
getlocationFrombaiduSDK();//当设备在室内往往GPS无法正常工作,这时候可以用baiduSDKAPI来获取位置服务
locationClient.start();//开启baiduSDK服务
/*
*当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。
*调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。
*如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,
*返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。
*定时定位时,调用一次requestLocation,会定时监听到定位结果。
*/
locationClient.requestLocation();
//test2();
}
}
baiduSDKAPI:
1. 登录百度LBS Android SDK下载中下载Android SDK全部功能的开发包,您可以结合自身需求,自定义选择业务功能,进行打包下载。
2. 在使用之前,您需要先申请密钥,且密钥和应用证书和包名绑定。具体配置可在下载中心查看
3.将下载的jar包放进libs下
4.点击鼠标右键
void getlocationFrombaiduSDK(){
locationClient = new LocationClient(this);
//设置定位条件
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); //是否打开GPS
option.setCoorType("bd09ll"); //设置返回值的坐标类型。
option.setPriority(LocationClientOption.NetWorkFirst); //设置定位优先级
option.setProdName("LocationDemo"); //设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
option.setScanSpan(UPDATE_TIME); //设置定时定位的时间间隔。单位毫秒
locationClient.setLocOption(option);
//注册位置监听器
locationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location1) {
// TODO Auto-generated method stub
if (location1 == null) {
tv1.setText("无法获取地理信息");
return;
}
latitude = location1.getLatitude();
longitude= location1.getLongitude();
LOCATION_COUTNS ++;
tv1.setText("经纬度为: "+"维度:" + latitude+ ",经度; " + longitude + "fs" +LOCATION_COUTNS);
Thread thread=new Thread(new Runnable()
{
@Override
public void run()
{
Message msg = new Message();
msg.what = sendGPS();;
handler.sendMessage(msg);
}
});
thread.start();
}
public void onReceivePoi(BDLocation location) {
}
});
}
当然别忘了Manifest.xml里加上权限
<uses-permission android:name="android.permission.INTERNET" /><!-- 这个权限用于进行网络连接-->
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<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" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>