Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android DummyLocationProvider问题_Android - Fatal编程技术网

Android DummyLocationProvider问题

Android DummyLocationProvider问题,android,Android,我试图得到经度和纬度,下面是这样做的类。。。 但我在运行时遇到了android异常 位置l=位置管理器getLastKnownLocation(最佳提供商) 和at long=Double.toString(loc.getLongitude()) 此外,即使在手机上,提供商也始终显示为DummyLocationProvider public class Util implements LocationListener { public static LocationManager locMgr

我试图得到经度和纬度,下面是这样做的类。。。 但我在运行时遇到了android异常

位置l=位置管理器getLastKnownLocation(最佳提供商)

和at long=Double.toString(loc.getLongitude())

此外,即使在手机上,提供商也始终显示为DummyLocationProvider

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精细位置