冰淇淋三明治的位置经理问题

Adi*_*ale 10 gps android

任何人都可以解释一下这个错误是什么?我只获得了android 4 +而不是下面的:

E/AndroidRuntime(891): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.getaddress/com.example.getaddress.MainActivity}: java.lang.IllegalArgumentException: requested provider network doesn't exisit

Sté*_*ane 24

似乎没有Google API的 Android 4+模拟器中无法访问NETWORK_PROVIDER位置提供程序(实际上我还没有测试过所有这些,见下文).我测试的真实设备都可以使用它(但是它们都有Google服务,测试自定义,干净的Android版本,也许使用Kindles会很有趣吗?).

这不是在设备设置中启用/禁用提供程序的问题,它在模拟器中根本不存在.

症状

基本上这段代码:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,mLocListener);
Run Code Online (Sandbox Code Playgroud)

将导致以下异常:

java.lang.IllegalArgumentException: provider doesn't exisit: null
Run Code Online (Sandbox Code Playgroud)

在所有Android 4+裸模拟器上(与Google绑定模拟器相对)

注意:"exisit"中的拼写错误在实际日志行中.

诊断

使用以下命令获取目标设备上所有位置提供程序的列表:

List<String> providers = locationManager.getAllProviders();
Run Code Online (Sandbox Code Playgroud)

我可以看到网络提供商在场

  • 物理设备
  • android 2.3.3模拟器(没有Google API)
  • android级别17(4.2)模拟器(使用Google API)

但不是

  • 使用Google API的android级别15(4.0.3)模拟器
  • android 4.2模拟器(没有Google API)

我的猜测是,出于非技术原因,谷歌不允许在AOSP中使用网络位置服务,并将其使用限制在4.2(?)的谷歌操作系统版本中.

我不知道在非Google设备(例如Kindle)上是否有替代网络位置服务.

可能对您的应用产生影响

我不希望这对大多数智能手机和平板电脑产生任何影响.但它可以

  • 有点削弱你的考试能力
  • 对于使用自定义/非Google版Android的用户来说是一个兼容性问题(再次,Kindle?)

如何检测

一个简单的测试,例如:

locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)
Run Code Online (Sandbox Code Playgroud)

如果设备上有网络提供商,可以轻松告诉您.请注意,如果它存在但用户尚未激活它,则LocationListener将在位置请求后收到onProviderDisabled回调.