模拟位置不适用于Android Pie及更高版本
我已经编写了一个使用模拟位置提供程序的单元测试。当接收到位置更新时,测试通过,或在超时时失败 测试通过了在模拟像素3上的良好运行,Android M通过了Android O。它在Android p和Q上超时。我也在物理像素3上测试了Q,但仍然失败 我已经为此绞尽脑汁一段时间了,不知道发生了什么事 测试: 舱单:模拟位置不适用于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
<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)