Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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 Pie及更高版本_Android_Unit Testing_Testing_Mocking_Location - Fatal编程技术网

模拟位置不适用于Android Pie及更高版本

模拟位置不适用于Android Pie及更高版本,android,unit-testing,testing,mocking,location,Android,Unit Testing,Testing,Mocking,Location,我已经编写了一个使用模拟位置提供程序的单元测试。当接收到位置更新时,测试通过,或在超时时失败 测试通过了在模拟像素3上的良好运行,Android M通过了Android O。它在Android p和Q上超时。我也在物理像素3上测试了Q,但仍然失败 我已经为此绞尽脑汁一段时间了,不知道发生了什么事 测试: 舱单: <manifest package="design.inhale.locationapi" xmlns:android="http://schemas.android.co

我已经编写了一个使用模拟位置提供程序的单元测试。当接收到位置更新时,测试通过,或在超时时失败

测试通过了在模拟像素3上的良好运行,Android M通过了Android O。它在Android p和Q上超时。我也在物理像素3上测试了Q,但仍然失败

我已经为此绞尽脑汁一段时间了,不知道发生了什么事

测试:

舱单:

<manifest package="design.inhale.locationapi"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

事实证明,我需要为后台位置访问添加权限(我想测试算是在后台运行?)

添加了对清单的权限

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>`
<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="design.inhale.locationapi"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

</manifest>
@SuppressLint("ObsoleteSdkInt")
fun Location.mock(latitude: Double = 0.0, longitude: Double = 0.0, accuracy: Float = 0f): Location {

    this.latitude = latitude
    this.longitude = longitude
    this.accuracy = accuracy
    this.time = currentTimeMillis()

    if (SDK_INT > JELLY_BEAN) this.elapsedRealtimeNanos = elapsedRealtimeNanos()

    return this
}
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>`
val permissionRule: GrantPermissionRule = grant(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_BACKGROUND_LOCATION)