【问题标题】:Programmatically setting genymotion gps during testing causes "SecurityException: invalid package name" when setting latitude在测试期间以编程方式设置 genymotion gps 在设置纬度时导致“SecurityException:无效包名称”
【发布时间】:2016-02-04 07:56:42
【问题描述】:

测试时,我通过 Genymotion 设置纬度,如下所示:

 package com.mypackage.name;

 public class TestGps extends ActivityInstrumentationTestCase2<MyClass>{

    ... //setup just calls super.setup();

    public void testLocationButton(){
       Gps gps = GenymotionManager.getGenymotionManager(getInstrumentation().getContext()).getGps();
       gps.setStatus(Gps.Status.ENABLED);
       gps.setLatitude(40.7127); // the error happens here
       gps.setLongitude(74.0059);
   }
}

运行时出现以下问题:

java.lang.SecurityException: invalid package name: com.mypackage.name
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:582)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:867)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:490)
at com.genymotion.api.Gps.waitForTargetLocation(Gps.java:271)
at com.genymotion.api.Gps.setLatitude(Gps.java:134)

【问题讨论】:

  • 使用getTargetContext() 而不是getContext()

标签: java android genymotion android-testing android-securityexception


【解决方案1】:

在测试中Instrumentation.getContext() 返回测试的上下文。要访问正在测试的应用程序的上下文,您需要改为调用Instrumentation.getTargetContext()。您还应该考虑使用InstrumentationRegistry。现在这是Instrumentation 实例的首选访问点。

【讨论】:

  • 该死!这很快,而且奏效了!而且,我将从现在开始使用 InstrumentationRegistry。非常感谢!
  • @alotofquestions 澄清一下,InstrumentationRegistry 仅在 Testing Support Library 中可用。
猜你喜欢
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多