话说菜鸟做的一个有关定位的应用,开始用的googleapi,做成后感觉效果不佳。遂最近改用百度地图api。但在实现后台定位(在service中定位)时多次尝试失败,在定位时返回错误代码,说服务没有开启。网上也没有找到这方面的资料,希望大神们有类似经验的提示一下,最好有个样例代码。下面附上我的这部分代码。
package com.atd_1.activity;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.LocationData;
import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.GpsStatus.Listener;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
public class GPSService extends Service
{
private MyGPSBinder mbinder;
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener2();
public LocationData locData = new LocationData();
@Override
public void onCreate()
{
super.onCreate();
mbinder = new MyGPSBinder();
mLocationClient = new LocationClient(this); // 声明LocationClient类
mLocationClient.registerLocationListener(myListener); // 注册监听函数
mLocationClient = new LocationClient(this);
}
@Override
public IBinder onBind(Intent intent)
{
return mbinder;
}
@Override
public void onDestroy()
{
System.out.println("停止GPS后台服务!");
if (mLocationClient.isStarted())
{
// mLocationClient.stop();
System.out.println("关闭SDK服务");
}
stopSelf();
super.onDestroy();
}
class MyGPSBinder extends Binder
{
/**
* 开启GPS服务
*/
public void start()
{
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setAddrType("detail");
option.setCoorType("gcj02");
option.setScanSpan(5000);
option.disableCache(true);// 禁止启用缓存定位
mLocationClient.setLocOption(option);
if (!mLocationClient.isStarted())
{
mLocationClient.start();
System.out.println("开启定位SDK服务");
if (!mLocationClient.isStarted())
{
mLocationClient.start();
System.out.println("开启定位SDK服务2");
}
}
return;
}
/**
* 停止GPS服务
*/
public void stop()
{
}
/**
* 获取GPS位置对象
*/
public LocationData getLocation()
{
start();
System.out.println("获取位置" + mLocationClient.requestLocation());
if (mLocationClient != null && mLocationClient.isStarted())
{
System.out.println("获取位置" + mLocationClient.requestLocation());
return locData;
} else if (!mLocationClient.isStarted())
{
System.out.printf("locClient is not started");
return null;
} else
{
System.out.println("locClient is null");
return null;
}
}
}
}
//////////////////////////////////////////////////////////////
package com.atd_1.activity;
import java.util.HashMap;
import android.annotation.SuppressLint;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
public class MyLocationListener2 implements BDLocationListener
{
// HashMap<String, String> locationInformation = new HashMap<String, String>();
// HashMap<String, String> poiInformation = new HashMap<String, String>();
@Override
public void onReceiveLocation(BDLocation location)
{
System.out.println("错误代码:---------------"+location.getLocType());
System.out.println("函数被调用");
if (location == null)
{
System.out.println("location返回为空值!");
return;
}
StringBuffer sb = new StringBuffer(256);
sb.append("time : ");
sb.append(location.getTime());
sb.append("\nerror code : ");
sb.append(location.getLocType());
sb.append("\nlatitude : ");
sb.append(location.getLatitude());
sb.append("\nlontitude : ");
sb.append(location.getLongitude());
sb.append("\nradius : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation)
{
sb.append("\nspeed : ");
sb.append(location.getSpeed());
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation)
{
sb.append("\naddr : ");
sb.append(location.getAddrStr());
}
System.out.println("11111" + sb.toString());
}
public void onReceivePoi(BDLocation poiLocation)
{
if (poiLocation == null)
{
return;
}
StringBuffer sb = new StringBuffer(256);
sb.append("Poi time : ");
sb.append(poiLocation.getTime());
sb.append("\nerror code : ");
sb.append(poiLocation.getLocType());
sb.append("\nlatitude : ");
sb.append(poiLocation.getLatitude());
sb.append("\nlontitude : ");
sb.append(poiLocation.getLongitude());
sb.append("\nradius : ");
sb.append(poiLocation.getRadius());
if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation)
{
sb.append("\naddr : ");
sb.append(poiLocation.getAddrStr());
}
if (poiLocation.hasPoi())
{
sb.append("\nPoi:");
sb.append(poiLocation.getPoi());
} else
{
sb.append("noPoi information");
}
// logMsg(sb.toString());
}
}