百度地图服务调起缓慢导致位置信息获取不到
注意,因为代码执行过程中,虽然调起百度服务这一行代码执行了,但是从这行代码执行到百度地图读取位置信息这项服务调起还是有延迟的,因此,如果接下来的代码需要用到百度地图获取的位置信息,就一定要设置延迟执行。(就是为了等待百度地图服务彻底调起)
举例:
private void SendMesses(){
//获取百度地图定位
BDposition();
Toast.makeText(this, "开始发送短信!", Toast.LENGTH_SHORT).show();
TimerTask task = new TimerTask() {
@Override
public void run() {
/**
*要执行的操作
*/
for (String TargetPhone: arrayList){
String content = "测试!";
SendMess(TargetPhone,content);
}
}
};
Timer timer = new Timer();
timer.schedule(task, 5000);//3秒后执行TimeTask的run方法
}
private void SendMess(String TargetPhone, String content){
//直接使用发送短信的api
SmsManager sm = SmsManager.getDefault();
/**
* arg0:目标号码
* arg1:短信中心号码,null即可,写死了到换了地方不就没办法打电话了
* arg2:短信正文
*/
content += "我的位置在:"+addr+" ,Lat="+lat+" ,Lon="+lon;
sm.sendTextMessage(TargetPhone, null, content, null, null);
System.out.println("短信发出!");
}
private void BDposition() {
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
// 未打开位置开关,可能导致定位失败或定位不准,提示用户或做相应处理
Toast.makeText(this,"没有打开位置开关!",Toast.LENGTH_SHORT).show();
}
//获取手机的GPS定位
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(this.getApplicationContext());
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
mLocationClient = new LocationClient(getApplicationContext());
//声明LocationClient类
myListener = new MyLocationListenerNow();
mLocationClient.registerLocationListener(myListener);
//注册监听函数
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//可选,设置定位模式,默认高精度
option.setScanSpan(0);
//可选,设置发起定位请求的间隔,int类型,单位ms
//如果设置为0,则代表单次定位,即仅定位一次,默认为0
//如果设置非0,需设置1000ms以上才有效
option.setOpenGps(true);
//可选,设置是否使用gps,默认false
//使用高精度和仅用设备两种定位模式的,参数必须设置为true
//option.setLocationNotify(true);
//可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
//mLocationClient为第二步初始化过的LocationClient对象
//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
//开始定位
mLocationClient.start();
}