Android DummyLocationProvider问题
我试图得到经度和纬度,下面是这样做的类。。。 但我在运行时遇到了android异常 位置l=位置管理器getLastKnownLocation(最佳提供商) 和at long=Double.toString(loc.getLongitude()) 此外,即使在手机上,提供商也始终显示为DummyLocationProviderAndroid DummyLocationProvider问题,android,Android,我试图得到经度和纬度,下面是这样做的类。。。 但我在运行时遇到了android异常 位置l=位置管理器getLastKnownLocation(最佳提供商) 和at long=Double.toString(loc.getLongitude()) 此外,即使在手机上,提供商也始终显示为DummyLocationProvider public class Util implements LocationListener { public static LocationManager locMgr
public class Util implements LocationListener {
public static LocationManager locMgr;
private static List<String> providers;
private static String bestProvider;
private Context context;
public static String lat;
public static String longt;
public Util(Context context) {
this.context = context;
if(locMgr == null) //Get LocationManager
locMgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
}
public void getLocations() {
//List All providers
providers = locMgr.getAllProviders();
//Get criteria
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//Get best provider
bestProvider = locMgr.getBestProvider(criteria, false);
printProvider(bestProvider);
//Get Last known location
Location l = locMgr.getLastKnownLocation(bestProvider);
if(l==null)
System.out.println("im null");
printLocation(l);
}
private void printLocation(Location loc) {
if(loc == null) { //means there is no recent location
getNewLocation();
}else
lat = Double.toString(loc.getLatitude());
longt = Double.toString(loc.getLongitude());
System.out.println("cached " + lat + " " + longt);
}
private void printProvider(String provider) {
System.out.println(provider);
LocationProvider info = locMgr.getProvider(provider);
System.out.println("provider= " + info.toString() + "\n\n");
}
private boolean getNewLocation() {
if(locMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { //This is executed since it can get locations faster than gps (is executed only if use wireless networks for locations is selected)
locMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
return true;
}else if(locMgr.isProviderEnabled(LocationManager.GPS_PROVIDER)) { //This is exceuted if n/w locations is turned off & gps is turned on
locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
return true;
}else { //executed when gps & location by network is turned off..
return false;
}
}
public类Util实现LocationListener{
公共静态位置经理locMgr;
私有静态列表提供者;
私有静态字符串提供者;
私人语境;
公共静态字符串lat;
公共静态字符串长;
公共Util(上下文){
this.context=上下文;
if(locMgr==null)//获取LocationManager
locMgr=(LocationManager)context.getSystemService(context.LOCATION\u服务);
}
公共位置(){
//列出所有供应商
providers=locMgr.getAllProviders();
//获取标准
标准=新标准();
标准.设定准确度(标准.准确度/精细度);
//获得最佳供应商
bestProvider=locMgr.getBestProvider(条件,false);
打印提供商(bestProvider);
//获取最后已知位置
位置l=位置管理器getLastKnownLocation(最佳提供商);
if(l==null)
System.out.println(“im null”);
打印位置(l);
}
专用位置(位置loc){
如果(loc==null){//表示没有最近的位置
getNewLocation();
}否则
lat=Double.toString(loc.getLatitude());
lont=Double.toString(loc.getLongitude());
System.out.println(“缓存”+lat+“+lont”);
}
私有void打印提供程序(字符串提供程序){
System.out.println(提供者);
LocationProvider info=locMgr.getProvider(提供者);
System.out.println(“provider=“+info.toString()+”\n\n”);
}
私有布尔getNewLocation(){
如果(locMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){//,则执行此操作,因为它可以比gps更快地获取位置(仅当选择了“对位置使用无线网络”时才执行)
LocationManager.RequestLocationUpdate(LocationManager.NETWORK\u提供程序,0,0,此);
返回true;
}else if(locMgr.isProviderEnabled(LocationManager.GPS\u PROVIDER)){//如果n/w位置已关闭且GPS已打开,则这是例外情况
LocationManager.RequestLocationUpdate(LocationManager.GPS\u提供程序,0,0,此);
返回true;
}else{//在关闭gps和网络定位时执行。。
返回false;
}
}
请修改您的代码,它可能会对您有所帮助
Location l = context.locMgr.getLastKnownLocation(bestProvider);
context.locMgr无法使用,因为它抛出错误:locMgr无法解析或不是字段确切的异常是什么..如果提供程序没有合适的权限,则抛出SecurityException。如果提供程序为null或不存在异常E/AndroidRuntime(2925):位于info.com.WUtil.getLocations():50和printLocation():61.所有权限都已就位android.permission.ACCESS\u粗略位置,android.permission.ACCESS\u精细位置