IllegalArgumentException:提供程序不存在:在地图V1上为null

 l夜幕下的流星雨l 发布于 2023-02-09 14:15

我正在使用Google Maps API V1.我有这个错误:

     java.lang.IllegalArgumentException: provider doesn't exisit: null

这是我的代码:

    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    String provider = locationManager.getBestProvider(criteria, true);

    if (provider != null)
    {

        startTime = System.currentTimeMillis(); 

        geoLocTimeOutTask = new GeoLocTimeOutTask();
        geoLocTimeOutTask.execute();

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    }
    else
    {
        geoLocCallbackObj.geoLocationCallback(tagCallback); 

    }

我理解错误,我的问题是,设备给我这个错误吗?我怎么能避免这个呢?

2 个回答
  • 建议修复这个是使用新的位置API而不是旧的位置http://developer.android.com/google/play-services/location.html

    但是你真的需要做的就是检查一下

    if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    }
    

    如果提供者没有启用,那么它不会通过,不会崩溃

    2023-02-09 14:16 回答
  • 当设备上不存在该提供程序时,您正在请求网络提供程序的更新.你可以替换这两行:

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    

    locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
    

    您已经开始努力寻找设备为您的标准提供的最佳提供商,以便使用它.

    或者,在注册提供程序之前检查提供程序是否存在:

    if (locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER))
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    
    if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER))
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    

    您还使用零时间和最小距离.这非常适合在虚拟设备上进行测试,但记得在使用真实设备时更改它们,否则电池消耗会很高.

    2023-02-09 14:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有